Подтвердить что ты не робот

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
}
4b9b3361

Ответ 1

Линия

[self addGestureRecognizer: pan];

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

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

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