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
должен поддерживать сильную сторону распознавателя.