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