Я играю с признанием прикосновений в приложении iOS, и у меня есть этот простой код
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"%lu",(unsigned long)[touches count]);
[touches enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
UITouch *touch = obj;
CGPoint touchLocation = [touch locationInNode:self.scene];
NSLog(@"B x:%f - y:%f",touchLocation.x,touchLocation.y);
}];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[touches enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
UITouch *touch = obj;
CGPoint touchLocation = [touch locationInNode:self.scene];
NSLog(@"E x:%f - y:%f",touchLocation.x,touchLocation.y);
}];
}
ПрикосновенияBegan называют штрафом, если я помещаю от одного пальца до 5 пальцев на экране одновременно, я вижу, что его вызывают с правильной информацией
То же самое не происходит с touchesBegan
, много раз, если у меня есть 3 пальца на экране и удалять их одновременно, я вижу только информацию о 2 касаниях, заканчивающихся (а иногда и 1). Если я вынимаю пальцы по одному за раз, метод также обычно вызывается 2 раза (иногда 1, хотя редко его можно будет назвать правильным 3 раза). По мере увеличения количества касаний также вероятный капюшон некоторой информации, не являющейся показано в методе touchesEnded
Способы touchesMoved:withEvent:
and touchesCancelled:withEvent:
также реализованы с той же логикой
Может ли кто-нибудь объяснить это поведение? Есть что-то, что мне не хватает?