我正在开发Cocoa Touch应用程序,并试图通过确定 View 层的哪个子层被触摸来处理触摸。我的 Controller 的代码如下所示:

CALayer *hitLayer = [self.view.layer hitTest:point];

这没用。如果我点击子层的底部而不是顶部,这将起作用。经过一个小时的梳理和梳理,我终于发现,如果使用表示层而不是层本身来进行 HitTest ,则它可以工作:
CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];

因此,我已经解决了我的问题,但是我的问题是:为什么?

我已经阅读了《核心动画》指南,并且了解表示树和渲染树可能与对象模型树有所不同。但是我不明白为什么表示树会(显然)具有不同的点击测试行为。表示树和对象模型是否具有相同的框架,边界等?

最佳答案

根据CALayer documentation,模型和表示树之间似乎存在差异,取决于向用户呈现的内容(取决于进行中的动画)。对于 HitTest ,presentationLayer方法中有一个引用:



因此,我怀疑只有表示层具有正确的几何信息才能执行 HitTest 。

关于cocoa - 为什么必须使用CALayer的presentationLayer进行 HitTest ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2199171/

10-13 01:00