Ответ 1
Вы можете попробовать установить свойство распознавателя delegate
и реализовать -gestureRecognizer:shouldReceiveTouch:
. Его следует называть последовательно, и вы можете затем прикоснуться к касаниям.
Похоже, что нет гарантии относительно порядка, в котором появляются UITouches при циклировании через метод UIGestureRecognizer [locationOfTouch: inView:]. В частности:
for (int i = 0; i < [recognizer numberOfTouches]; i++) {
CGPoint point = [recognizer locationOfTouch:i inView:self];
NSLog(@"[%d]: (%.1f, %.1f)", i, point.x, point.y);
}
Можно было бы подумать, что точка с индексом 0 будет первым UITouch, или первым, который был выпущен, но довольно часто порядок в 2 касания смешивается. Кто-нибудь знает, как проверить порядок этих событий? К сожалению, нет доступа к самим объектам UITouch (с меткой времени).
Кроме того, в документации не содержится никаких гарантий, что штрихи от -locationOfTouch:inView:
всегда будут в надежном порядке. Кто-нибудь может подтвердить или опровергнуть это?
Вы можете попробовать установить свойство распознавателя delegate
и реализовать -gestureRecognizer:shouldReceiveTouch:
. Его следует называть последовательно, и вы можете затем прикоснуться к касаниям.
Мне кажется, что я хочу отследить, т.е. два пальца двух рук самостоятельно, вместо того, чтобы распознавать конкретный жест, который является целью UIGestureRecognizer, как говорится в названии. Если это то, что вы хотите, я бы скорее использовал методы UIResponder:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[self touchesEnded:touches withEvent:event];
}
При таком подходе вы действительно получаете набор объектов UITouch и можете выполнять расширенное отслеживание.
Почему не повторяется через UITуши, отсортированные по метке времени?