Многозадачный жест четырьмя пальцами активирует жест UIPinchGestureRecognizer

Я использую UIPinchGestureRecognizer, который использует 2 пальца по умолчанию. Если пользователь решает выполнить многозадачный жест, действие жестов повышения также активируется.

Есть ли способ отменить жест повышения при обнаружении более четырех экземпляров UITouch?

Редактировать Удален пример кода, так как это был неправильный подход.

2 ответа

Многозадачным жестом numberOfTouches вернулся UIPinchGestureRecognizer 2 вместо 4 или 5, потому что некоторые касания игнорируются.

Вы можете подкласс UIPinchGestureRecognizer и переопределить ignoreTouch:forEvent отменить распознаватель, если событие имеет 4 или 5 касаний:

- (void) ignoreTouch:(UITouch*)touch forEvent:(UIEvent*)event
{
    [super ignoreTouch:touch forEvent:event];

    // Cancel recognizer during a multitask gesture
    if ([[event allTouches] count] > 3)
    {
        self.state = UIGestureRecognizerStateCancelled;
    }
}

Поскольку вы не создаете подкласс UIPinchGestureRecognizer, вам не следует использовать touchBegan:withEvent:, Вместо этого вы должны обрабатывать его в методе, который вызывается, когда происходит пинч.

- (void)handlePinch:(UIPinchGestureRecognizer *)pinchGestureRecognizer
{
    // if there are 2 fingers being used
    if ([pinchGestureRecognizer numberOfTouches] == 2) {
        // do stuff
    }
}
Другие вопросы по тегам