UILongPressGestureRecognizer называют дважды при придавливании

Я обнаруживаю, если пользователь придавливал в течение 2 секунд:

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                             initWithTarget:self 
                                             action:@selector(handleLongPress:)];
        longPress.minimumPressDuration = 2.0;
        [self addGestureRecognizer:longPress];
        [longPress release];

Это - то, как я обрабатываю длинное нажатие:

-(void)handleLongPress:(UILongPressGestureRecognizer*)recognizer{
    NSLog(@"double oo");
}

Текст "двойной oo" печатается дважды, когда я придавливаю дольше 2 секунд. Почему это? Как я могу зафиксировать?

352
задан Sheehan Alam 23 July 2010 в 04:21
поделиться

1 ответ

UILongPressGestureRecognizer - это распознаватель непрерывных событий. Вы должны посмотреть на состояние, чтобы понять, является ли это началом, серединой или концом события, и действовать соответственно. Т.е. вы можете отбросить все события после начала, или смотреть только на движение, как вам нужно. Из Class Reference:

Жесты длительного нажатия непрерывны. Жест начинается (UIGestureRecognizerStateBegan), когда количество допустимых пальцев (NumberOfTouchesRequired) было нажато в течение заданного периода времени (minimumPressDuration) и прикосновения не выходят за допустимый диапазон движения (allowableMovement). Распознаватель жестов переходит в состояние Change при каждом движении пальца и завершается (UIGestureRecognizerStateEnded) при поднятии любого из пальцев.

Теперь вы можете отслеживать состояние вот так

-  (void)handleLongPress:(UILongPressGestureRecognizer*)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) {
      NSLog(@"UIGestureRecognizerStateEnded");
    //Do Whatever You want on End of Gesture
     }
    else if (sender.state == UIGestureRecognizerStateBegan){
       NSLog(@"UIGestureRecognizerStateBegan.");
   //Do Whatever You want on Began of Gesture
     }
  }
671
ответ дан 23 November 2019 в 00:24
поделиться