Почему UIPinchGestureRecognizer не может получить состояние Ended?

У меня есть 4 распознавателя жестов для 1 представления.

- (void)createGestureRecognizers {
UITapGestureRecognizer *singleFingerSingleTap = [[UITapGestureRecognizer alloc]
                                                 initWithTarget:self action:@selector(handleSingleFingerSingleTap:)];
singleFingerSingleTap.numberOfTapsRequired = 1;
[self.panelController.view addGestureRecognizer:singleFingerSingleTap];

UITapGestureRecognizer *singleFingerDoubleTap = [[UITapGestureRecognizer alloc]
                                                 initWithTarget:self action:@selector(handleSingleFingerDoubleTap:)];
singleFingerDoubleTap.numberOfTapsRequired = 2;
[self.panelController.view addGestureRecognizer:singleFingerDoubleTap];

[singleFingerSingleTap requireGestureRecognizerToFail:singleFingerDoubleTap];

[singleFingerSingleTap release];
[singleFingerDoubleTap release];

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]
                                      initWithTarget:self action:@selector(handlePanGesture:)];
[self.panelController.view addGestureRecognizer:panGesture];
[panGesture release];

UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]
                                          initWithTarget:self action:@selector(handlePinchGesture:)];
[self.panelController.view addGestureRecognizer:pinchGesture];
[pinchGesture release];}

Мне нужно обработать состояние Ended для UIPinchGestureRecognizer, но иногда оно имеет последнее состояние Changed, а не Ended, как должно быть. Кто-нибудь знает, почему? Пробую играть с setDelaysTouchesEnded: но ничего :(


person Bogdan    schedule 20.08.2012    source источник


Ответы (2)


Жест щипка — это жест двумя пальцами, поэтому иногда один палец остается на экране, а другой уже поднят. Итак, мой совет: обрабатывать UIGestureRecognizerStateCancelled и UIGestureRecognizerStateFailed так же, как UIGestureRecognizerStateEnded.

person Nikita Ivaniushchenko    schedule 20.08.2012

Это та же проблема, что и UIRotationGestureRecognizer, она будет срабатывать при каждом движении и остановится, когда вы остановитесь, но не скажет вам - эй, пользователь убрал пальцы, это движение закончилось.

Это потому, что это непрерывный жест, а не простой жест.

Вы должны справиться с UIGestureRecognizerStateEnded тоже.

person Daniel    schedule 20.08.2012