Xcode - TouchBegan - последние касания / новые штрихи
-
26-09-2019 - |
Вопрос
Я использовал прикосновения, начали отслеживать целых 8 прикосновений, и каждый триггеры события. Эти прикосновения могут возникать одновременно или в шахматном порядке.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Touch Began");
NSSet *allTouches = [event allTouches];
for (int i=0; i<allTouches.count; i++) {
UITouch *touch = [[allTouches allObjects] objectAtIndex:i];
if (/*touch inside button in question*/) {
//Trigger the event.
}
}
}
Этот код работает для MultiTouch, и у него нет проблем, кроме: (см. Если вы можете догадаться)
Из-за того, как работает AllTouches, он буквально получает все прикосновения. Из-за этого он проходит через все прикосновения, которые в настоящее время активны, когда пользователь запускает другое касание, и, таким образом, запускает событие одного из кнопок дважды.
Ex: Johnny - нажатие кнопки 1. Событие 1 происходит. Джонни оставляет свой палец на кнопку 1, и нажимает кнопку 2. Событие 2 происходит, но кнопка 1 все еще является частью AllTouches, и поэтому событие 1 снова срабатывает.
Так вот вот вопрос: как я могу получить новое прикосновение?
Решение
Тот же сенсорный объект будет возвращен на последующие вызовы touchesbegan для любого непрерывного прикосновения. Поэтому просто сохраните каждое UITouch * Нажмите, что вы уже обрабатывали, как началось (и еще не закончился), и по мере того, как вы повторяете в следующий раз в TouchesBegan, пропустите те, которые вы настолько сохранены / отмечены.