Я обнаруживаю, если пользователь придавливал в течение 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 секунд. Почему это? Как я могу зафиксировать?
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
}
}