Ich habe an einer Cocoa Touch-Anwendung gearbeitet und versucht, Berührungen zu behandeln, indem ich festgestellt habe, welche Teilschicht der Ebene einer Ansicht berührt wurde. Der Code meines Controllers sah so aus:Warum muss man CALayers presentationLayer für Hit-Tests verwenden?
CALayer *hitLayer = [self.view.layer hitTest:point];
Dies funktionierte nicht. Es würde funktionieren, wenn ich auf die Unterseiten von Unterschichten tippte, aber nicht auf die Oberseiten. Nach einer Stunde Haareziehen und googeln, ich heraus, schließlich dachte, dass es funktioniert, wenn man die Präsentationsschicht verwendet die Hit-Prüfung statt der Schicht selbst zu tun:
CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];
So habe ich mein Problem gelöst , aber meine Frage ist: Warum?
Ich habe den Leitfaden zur Kernanimation gelesen, und ich verstehe, dass der Darstellungsbaum und der Darstellungsbaum vom Objektmodellbaum abweichen können. Aber ich verstehe nicht, warum der Darstellungsbaum (scheinbar) ein anderes Hit-Test-Verhalten hat. Wären der Präsentationsbaum und das Objektmodell nicht dieselben Rahmen, Grenzen usw.?
Was ist die Klasse von self.view: UIView oder CALayer? –
self.view ist eine UIView. Ich habe den obigen Code korrigiert, um "self.view.layer" zu verwenden, wie es hätte sein sollen. –