gpt4 book ai didi

cocoa - 为什么必须使用 CALayer 的presentationLayer 来进行 HitTest ?

转载 作者:行者123 更新时间:2023-12-03 16:08:49 26 4
gpt4 key购买 nike

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

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

这不起作用。如果我点击子层的底部而不是顶部,它就会起作用。经过一小时的胡思乱想和谷歌搜索后,我终于发现如果使用表示层而不是层本身来进行 HitTest ,它是有效的:

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

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

我已阅读核心动画指南,并且了解演示树和渲染树可能与对象模型树不同。但我不明白为什么演示树(显然)会有不同的 HitTest 行为。表示树和对象模型不会有相同的框架、边界等吗?

最佳答案

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

For example, sending a hitTest: message to the presentationLayer will query the presentation values of the layer tree.

所以我怀疑只有表示层具有正确的几何信息来执行 HitTest 。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com