2013-11-19 3 views
6

Я сделал вид, который можно использовать с помощью распознавателя жестов, который работает отлично. Но я хочу подчеркнуть вид, когда происходит прикосновение, и удаляем его, когда контакт заканчивается.Состояние жестов iOS Нажмите, чтобы не начиналось

Я попытался это:

- (IBAction)refresh:(UITapGestureRecognizer *)sender { 
    if(self.currentStatus == NODATA){ 
     if(sender.state == UIGestureRecognizerStateBegan){ 
      NSLog(@"Began!"); 
      [self.dashboardViewController.calendarContainer state:UIViewContainerStatusSELECTED]; 
     } 
     if (sender.state == UIGestureRecognizerStateEnded){ 
      NSLog(@"%@", @"Ended"); 
      [self.dashboardViewController.calendarContainer state:UIViewContainerStatusNORMAL]; 
     } 
     [self setState:REFRESHING data:nil]; 
    } 
} 

«не Закончилось» получить отображается NSLog из но начал не не так и не переходит в выбранный. Почему это?

ответ

9

UITapGestureRecognizer никогда не войдет в состояние UIGestureRecognizerStateBegan. Только непрерывный жестов (например, салфетки или щепотка) приведут к тому, что их распознаватели перейдут от UIGestureRecognizerStatePossible до UIGestureRecognizerStateBegan. Дискретные жесты, такие как кран, помещают свои распознаватели непосредственно в UIGestureRecognizerStateRecognized, то есть для одного крана, прямо в UIGestureRecognizerStateEnded.

Это, может быть, вы ищете UILongPressGestureRecognizer, который является непрерывным распознающим устройством, который войдет в UIGestureRecognizerStateBegan, что позволит вам различать начало и конец касания?

2

Вы также можете использовать методы touchesBegan:withEvent: и touchesEnded:withEvent:.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSSet *t = [event touchesForView:_myView]; 
    if([t count] > 0) { 
     // Do something 
    } 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSSet *t = [event touchesForView:_myView]; 
    if([t count] > 0) { 
     // Do something 
    } 
} 
+0

Спасибо, что я исправил его таким образом – Haagenti

4

Возможно, будет слишком поздно. Но это также поможет вам, если вы строго хотите использовать распознаватель жестов.

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] 
             initWithTarget:self 
             action:@selector(refresh:)]; 
    longPress.minimumPressDuration = 0.0; 

- (IBAction)refresh:(UILongPressGestureRecognizer *)sender { 
    if(self.currentStatus == NODATA){ 
     if(sender.state == UIGestureRecognizerStateBegan){ 
     NSLog(@"Began!"); 
     [self.dashboardViewController.calendarContainer state:UIViewContainerStatusSELECTED]; 
     } 
     if (sender.state == UIGestureRecognizerStateEnded){ 
     NSLog(@"%@", @"Ended"); 
     [self.dashboardViewController.calendarContainer state:UIViewContainerStatusNORMAL]; 
     } 
     [self setState:REFRESHING data:nil]; 
    } 
    } 
Смежные вопросы