J'ai un UIView qui contient un certain nombre de sous-classes CALayer. J'utilise le code suivant pour détecter quelle couche d'un événement tactile correspond à:iPhone hitTest interrompu après la rotation
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
NSLog(@"%@,%@",NSStringFromCGPoint(point),[self.layer hitTest:point].name);
}
Cela fonctionne bien jusqu'à ce que le dispositif est mis en rotation. Lorsque le périphérique est pivoté, toutes les couches actuelles sont supprimées de la super-couche et de nouveaux calayers sont créés pour s'adapter à la nouvelle orientation. Les nouvelles couches sont correctement insérées et visibles dans la bonne orientation.
Après la rotation, la méthode hitTest renvoie systématiquement la valeur null pour la couche. J'ai remarqué que lorsqu'on la fait pivoter de 180 degrés, la couche retournée est ce qui était à cet endroit avant la rotation, c'est-à-dire qu'elle touche la couche supérieure gauche et donne la couche en bas à droite lorsqu'elle est tournée de 180 degrés. Les coordonnées du test d'impact sont imprimées comme prévu avec (0,0) étant en haut à gauche. Je redessine les calques à chaque rotation, mais pour une raison quelconque, ils semblent correspondre à la "bonne" méthode, avec le bouton d'accueil en bas. Ai-je manqué un appel de fonction ou quelque chose après avoir manipulé la rotation?
Cheers, Adam