2014-01-24 1 views
3

Мне нужно сделать какой-то учебник в моем приложении. Идея заключается в том, что пользователь видит вид прозрачного, но слегка затемненного наложения с отверстием в нем. Это отверстие является единственной зоной, которая позволяет проникать сквозь нее. Решение этой проблемы прост - вам просто нужно реализовать - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event или даже - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event, где вы проверяете зону и проходите только те штрихи, которые хотите пройти.Прохождение событий касания через зону в движущемся UIView

Затем, например, этот вид начинает двигаться. Движение вызвано некоторой базовой анимации, как это:

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat animations:^{ 
    self.tutorialHoleView.center = CGPointMake(self.tutorialHoleView.center.x-160.0, self.tutorialHoleView.center.y); 
} completion:nil]; 

Вы ожидали бы вид, чтобы сохранить прохождение штрихи только в определенной зоне, но это не так - здесь мы говорим о self.layer.presentationLayer свойстве зрения. Итак, вам нужно создать SuperView где вы сделать что-то вроде этого:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UIView * subview in [self subviews]) { 
    if ([subview isKindOfClass:[ETTutorialFlashlightView class]]) { 
     ETTutorialHoleView * tutorialView = (ETTutorialHoleView *)subview; 
     CGPoint point = [[touches anyObject] locationInView:self]; 
     CGRect presentationFrame = [tutorialView.layer.presentationLayer frame]; 
     if ((point.x >= presentationFrame.origin.x+presentationFrame.size.width/2.0-75.0) && (point.x <= presentationFrame.origin.x+presentationFrame.size.width/2.0+75.0) && (point.y >= presentationFrame.origin.y+presentationFrame.size.height/2.0-75.0) && (point.y <= presentationFrame.origin.y+presentationFrame.size.height/2.0+75.0)) { 
     [self.tutorialView touchesBegan:touches withEvent:event]; 
     } 
    } 
    } 
} 

Кроме того, я сделал это, чтобы передать штрихи к моей надтаблице:

self.tutorialHoleView.userInteractionEnabled = NO; 

Удивительно, но это не работает вообще. Он не пропускает события крана, не говоря о событиях салфетки, которые мне тоже нужно передать. Итак, мой вопрос: как передать события касания через определенную зону в движущемся UIView? Возможно ли это?

ответ

0

добавить это в опции блока анимации, UIViewAnimationOptionAllowUserInteraction.

UIViewAnimationOptionAllowUserInteraction  = 1 << 1, // turn on user interaction while animating 

Это будет вызывать ваш метод touchesBegan, но в конце кадра только не прикасается, которые находятся в кадре во время движения.

 Смежные вопросы

  • Нет связанных вопросов^_^