Порядок нескольких касаний в UIGestureRecognizer - PullRequest
10 голосов
/ 15 мая 2011

Кажется, что нет никакой гарантии относительно порядка, в котором 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: всегда будут в надежном порядке. Кто-нибудь может подтвердить или опровергнуть это?

Ответы [ 3 ]

4 голосов
/ 12 августа 2011

Вы можете попробовать установить свойство delegate распознавателя и реализовать -gestureRecognizer:shouldReceiveTouch:. Он должен вызываться последовательно, и вы можете удерживать прикосновения.

3 голосов
/ 16 августа 2011

Мне кажется, что я хочу отслеживать то есть два пальца двух рук независимо, вместо того, чтобы распознавать конкретный жест, который является целью 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 и сможете выполнять расширенное отслеживание.

0 голосов
/ 16 апреля 2014

Почему бы не выполнить итерацию по UITouches, отсортированным по отметке времени?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...