У меня есть метод обработчика для UIPinchGestureRecognizer, который используется для масштабирования вида. То, что я пытаюсь сделать, это сделать так, что, хотя два касания находятся на экране для жест щепотки, и если палец будет поднят, оставшийся палец будет управляться распознающим жесты. Есть какой-либо способ сделать это? Я не могу придумать правильный способ передать один жест от одного обработчика к другому.Как перевести жест из обработчика UIPinchGestureRecognizer в обработчик UIPanGestureRecognizer?
1
A
ответ
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;
}
Это сделает оба обработчики срабатывать, так что, когда вы отпустите один из пальцев он будет ПАН, но когда у вас есть оба это зажать.
Хорошо, спасибо. Одна вещь, которую я заметил, заключается в том, что когда она переключается на жест панорамы, когда один палец удаляется, то оба распознавателя жеста становятся активными, кастрюля и щепотка. Я думаю, что смогу обойти это. Но разве можно полностью отказаться от распознавателя жестов при нажатии пальца? Глядя на документацию UIGestureRecognizer, я предполагаю, что вы не можете. – Joe
Также еще одна вещь .. При одновременном распознавании жестов метод panGestureRecognizer вызывает его метод, но также поддерживает panGestureRecognizer. Мне кажется немного странным, я не совсем понимаю логику этого. Я предполагаю, что это тоже невозможно предотвратить? – Joe
Вы можете предотвратить запуск regoznier жестов, удалив целевое действие target (- (void) removeTarget: (id): (SEL)) или просто отключив его (http://stackoverflow.com/questions/6593772/ как-to-cancel-reset-an-uigesturerecognizer). Поэтому, когда вы хотите, чтобы любой из распознавателей остановился, просто отключите его. Я никогда не испытывал вторую проблему (о взгляде родителей). Возможно, вы можете поделиться некоторыми из кода, который вы используете для создания распознавателя жестов, чтобы узнать, что может произойти. Удачи. –