касания начались с нескольких касаний дает неправильную позицию - PullRequest
1 голос
/ 17 декабря 2011

В настоящее время я использую этот код для определения местоположения всех касаний:

NSSet *allTouches = [event allTouches];
NSArray *allObjects=[allTouches allObjects];
for (int i=0;i<[allObjects count];i++)
{
    UITouch *touch = [allObjects objectAtIndex:i];
    CGPoint location = [touch locationInView: [touch view]];

    //Add to array....
}

При тестировании на симуляторе (у меня нет iPad для тестирования), он отлично работает с одним касанием. Но при попытке с несколькими касаниями первая итерация верна, а вторая итерация не дает правильной позиции.

т.е. Первое касание: (536,163) правильно Второе касание: (198 608), но должно быть где-то рядом (148 345)

У меня такое чувство, что я должен что-то изменить с помощью [touch locationInView: [touch view]]; чтобы дать правильное место, но я не знаю, что изменить. Любая помощь приветствуется.

1 Ответ

3 голосов
/ 17 декабря 2011

Трудно понять проблему по набору координат, не видя ваших взглядов, каких-либо подпредставлений и того, к чему вы прикасаетесь, но вы должны знать, что:

  1. [touch locationInView:aView] дает координаты касания в системе координат aView. То есть координаты, которые вы видите, относятся к верхнему левому углу aView, что может не соответствовать ожидаемому. Попробуйте [touch locationInView:self], что более распространено.

  2. Ознакомьтесь с разделом «События и касания» Руководства по обработке событий для iOS. Как правило, вам не нужно перебирать эту коллекцию, если вы пытаетесь отслеживать несколько касаний. iOS обрабатывает все это для вас. Вы можете использовать свойства tapCount и phase, чтобы получить информацию о том, сместились ли касания, сколько пальцев опущено и т. Д.

Помогает ли что-нибудь из этого?

...