Метод -(NSUInteger)numberOfTouches
из UIGestureRecognizer
может сказать, сколько касаний размещено на вашем виде.Также это Руководство по обработке событий может помочь вам:)
Другой путь - это UITapGestureRecognizer
, который можно настроить с помощью numberOfTouchesRequired
для ограничения одногораспознаватель на специальное количество пальцев.
РЕДАКТИРОВАТЬ
Я предлагаю вам использовать частную BOOL, которая блокирует взаимодействие с одним из распознавателей жестов, если другой активен.
С новым компилятором LLVM, доступным в XCode 4 и более поздних версиях, вы можете объявить переменные @private в категориях по умолчанию в файле вашей реализации (.m):
@interface YourClassName() {
@private:
BOOL interactionLockedByPanRecognizer;
BOOL interactionLockedByGestureRecognizer;
}
@end
@implementation YourClassName
... your code ...
@end
Ваш метод, обрабатывающийВзаимодействие с панорамированием (я предполагаю, что в конце вы будете делать какую-то анимацию для перемещения по вещам):
- (void)handlePan:(id)sender
{
if (interactionLockedByGestureRecognizer) return;
interactionLockedByPanRecognizer = YES;
... your code ...
[UIView animateWithDuration:0.35 delay:0.0 options:UIViewAnimationCurveEaseOut
animations:^{
[[sender view] setCenter:CGPointMake(finalX, finalY)];
}
completion:^( BOOL finished ) {
interactionLockedByPanRecognizer = NO;
}
];
}
Теперь вам просто нужно проверить внутри ваших touchesBegan
, touchesMoved
и touchesEnded
если взаимодействия заблокированы UIPanGestureRecognizer:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if (interactionLockedByPanRecognizer) return;
interactionLockedByGestureRecognizer = YES;
... your code ...
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if (interactionLockedByPanRecognizer) return;
... your code ...
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if (interactionLockedByPanRecognizer) return;
... your code ...
interactionLockedByGestureRecognizer = NO;
}