我正在开发一个 Cocoa Touch 应用程序,并试图通过确定视图层的哪个子层被触摸来处理触摸。我的控制器代码如下所示:
CALayer *hitLayer = [self.view.layer hitTest:point];
这行不通。如果我在子层的底部点击它会起作用,但不是在顶部。经过一个小时的拉扯和谷歌搜索,我终于发现如果使用表示层而不是层本身进行命中测试,它会起作用:
CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];
所以,我已经解决了我的问题,但我的问题是:为什么?
我已通读 Core Animation 指南,并且了解表示树和渲染树可能与对象模型树不同。但我不明白为什么表示树(显然)会有不同的命中测试行为。表示树和对象模型不会有相同的框架、边界等吗?