Jac*_*ack 3 mouse cocoa core-animation
我开始使用核心动画,我开始想知道如何处理各种鼠标事件,例如
CALayerCALayerCALayer现在我只专注于mouseDown发送到我的自定义视图的消息。根据文档,我应该-hitTest:(CGPoint)point在我的根层上使用调用(使用 进行设置的层[customView setLayer:rootLayer])。
它应该返回树中位于点指定位置的最远层。所以我做了:
[rootLayer hitTest:[event locationInWindow]]
Run Code Online (Sandbox Code Playgroud)
但它不起作用。如果我只是点击它似乎可以工作rootLayer,否则它只会返回null。当然,子图层被添加到rootLayer(实际上它们是被绘制的)
我是否缺少某种坐标转换?除此之外,这是处理鼠标点击的方式吗?
要查找鼠标何时进入 CALayer,我是否必须对鼠标的每次移动更新进行命中测试?
提前致谢
您可能想了解我们如何在Core Plot 框架内处理 CALayers 中的鼠标/触摸事件。我们已经在层次结构中使用各种 CALayer 子类建立了一个基本的响应者链。最近,我们添加了使用鼠标/触摸事件滚动图形的代码,作为如何使用这种交互的示例。
我自己也使用过类似的东西,只是在主层托管视图中处理了鼠标单击处理。在该视图中,我覆盖了 -mouseDown: 并添加了类似于以下内容的代码:
CGPoint pointOfClick = NSPointToCGPoint([self convertPoint:[theEvent locationInWindow] fromView:nil]);
CALayer *hitLayer = [self.layer hitTest:pointOfClick];
if ( (hitLayer != nil) && [hitLayer isKindOfClass:[MyCustomLayer class]])
{
[(MyCustomLayer *)hitLayer mouseDown];
}
Run Code Online (Sandbox Code Playgroud)
MyCustomLayer 类将是一个自定义 CALayer 子类,它响应 mouseDown 方法并执行一些自己的鼠标单击处理。或者,您可以完全在图层托管视图的此方法中处理鼠标单击响应。
需要确保的一件事是,如果您对 CALayer 进行了子类化,则如果传递的点位于图层的边界内,则其 -containsPoint: 方法仍会返回 YES。否则,-hitTest: 将忽略该层。
| 归档时间: |
|
| 查看次数: |
3658 次 |
| 最近记录: |