1

У меня есть метод обработчика для UIPinchGestureRecognizer, который используется для масштабирования вида. То, что я пытаюсь сделать, это сделать так, что, хотя два касания находятся на экране для жест щепотки, и если палец будет поднят, оставшийся палец будет управляться распознающим жесты. Есть какой-либо способ сделать это? Я не могу придумать правильный способ передать один жест от одного обработчика к другому.Как перевести жест из обработчика UIPinchGestureRecognizer в обработчик UIPanGestureRecognizer?

ответ

0

Это должно быть довольно легко. Создайте два распознавателя жестов. UIPinchGestureRecognizer и UIPanGestureRecognizer. Не забудьте стать делегатом обоих!

pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scaleHandler:)]; 
    [pinchRecognizer setDelegate:self]; 
    [pinchRecognizer setDelaysTouchesBegan:NO]; 
    [pinchRecognizer setDelaysTouchesEnded:NO]; 
    [pinchRecognizer setCancelsTouchesInView:NO]; 
    panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panHandler:)]; 
    [panRecognizer setMaximumNumberOfTouches:2]; 
    [panRecognizer setMinimumNumberOfTouches:1]; 
    [panRecognizer setDelegate:self]; 
    [panRecognizer setDelaysTouchesBegan:NO]; 
    [panRecognizer setDelaysTouchesEnded:NO]; 
    [panRecognizer setCancelsTouchesInView:NO]; 

Теперь реализуем следующий метод делегата жестов.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
return YES; 

}

Это сделает оба обработчики срабатывать, так что, когда вы отпустите один из пальцев он будет ПАН, но когда у вас есть оба это зажать.

+0

Хорошо, спасибо. Одна вещь, которую я заметил, заключается в том, что когда она переключается на жест панорамы, когда один палец удаляется, то оба распознавателя жеста становятся активными, кастрюля и щепотка. Я думаю, что смогу обойти это. Но разве можно полностью отказаться от распознавателя жестов при нажатии пальца? Глядя на документацию UIGestureRecognizer, я предполагаю, что вы не можете. – Joe

+0

Также еще одна вещь .. При одновременном распознавании жестов метод panGestureRecognizer вызывает его метод, но также поддерживает panGestureRecognizer. Мне кажется немного странным, я не совсем понимаю логику этого. Я предполагаю, что это тоже невозможно предотвратить? – Joe

+0

Вы можете предотвратить запуск regoznier жестов, удалив целевое действие target (- (void) removeTarget: (id): (SEL)) или просто отключив его (http://stackoverflow.com/questions/6593772/ как-to-cancel-reset-an-uigesturerecognizer). Поэтому, когда вы хотите, чтобы любой из распознавателей остановился, просто отключите его. Я никогда не испытывал вторую проблему (о взгляде родителей). Возможно, вы можете поделиться некоторыми из кода, который вы используете для создания распознавателя жестов, чтобы узнать, что может произойти. Удачи. –

Смежные вопросы