Estaba trabajando en una aplicación Cocoa Touch y tratando de manejar los toques al determinar qué subcapa de la capa de una vista se tocó. El código de mi controlador se veía así:¿Por qué uno tiene que usar la presentación de CALayer para las pruebas de aciertos?
CALayer *hitLayer = [self.view.layer hitTest:point];
Esto no estaba funcionando. Funcionaría si tocaba en la parte inferior de las subcapas, pero no en la parte superior. Después de una hora de tirones de pelo y buscando en Google, finalmente me di cuenta de que funciona si se utiliza la capa de presentación para hacer el hit-testing en lugar de la propia capa:
CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];
lo tanto, he resuelto mi problema , pero mi pregunta es: ¿por qué?
He leído la guía Core Animation, y entiendo que el árbol de presentación y el árbol de representación pueden diferir del árbol del modelo de objetos. Pero no entiendo por qué el árbol de presentación (aparentemente) tendría un comportamiento de prueba de aciertos diferente. ¿El árbol de presentación y el modelo de objetos no tendrían los mismos marcos, límites, etc.?
¿Cuál es la clase de self.view: UIView o CALayer? –
self.view es un UIView. He corregido el código anterior para usar "self.view.layer" como debería haber sido. –