UIPanGestureRecognizer не переключается в состояние "Конец" или "Отмена", если пользователь подталкивает x и y в отрицательном направлении

У меня есть небольшая проблема с UIPanGestureRecognizer. Recognizer не сообщает UIGestureRecognizerStateEnded если пользователь находится в верхнем левом углу (означает отрицательные x и y направления)

Состояние изменяется на UIGestureRecognizerStateEnded, если какое-либо направление является положительным, когда пользователь поднимает палец, но он просто перестает сообщать если оба направления отрицательные или нулевые.

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

Конечно, я мог бы настроить NSTimer для отображения наложения после некоторых автоматически, но я не вижу очевидной ошибки в моем коде и Я хочу, чтобы он был чистым.

Есть ли что-то, что я пропустил? Это ошибка Apple?

Инициализация такова:

pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRecognized:)];
[self addGestureRecognizer:pan];
[pan release];

Функция обработки выглядит так:

- (void)panRecognized:(UIPanGestureRecognizer *)gestureRecognizer {
 switch ([gestureRecognizer state]) {
 case UIGestureRecognizerStateBegan:
 // fade some overlaying views out
 break;
 case UIGestureRecognizerStateEnded:
 case UIGestureRecognizerStateCancelled:
 case UIGestureRecognizerStateFailed:
 // fade in the overlays
 break;
 default:
 break;
 }
 // handle panning
}
1 ответ

Линия

[self addGestureRecognizer: pan];

выглядит неправильно.

Кажется, вы создаете распознаватель жестов из UIView, а не UIViewController. Таким образом, если вид dealloc и он и распознаватель жестов исчезнут.

Лучше создать распознаватель жестов из UIViewController. Кроме того, UIViewController должен поддерживать сильную сторону распознавателя.

licensed under cc by-sa 3.0 with attribution.