设置-setWantsLayer:在Lion上的错误

时间:2012-03-20 05:08:17

标签: osx-lion nsview

我有一个NSView的子类,我正在处理-mouseDown:事件以获取屏幕上点击的位置。有了这个位置,我定义了一个点,我将用它在-drawRect上画一个矩形:它运行正常。

但......当我设置wantLayer时,事情就不起作用了。当我得到输入的位置时,我看到Y轴增加了20点,我不知道发生了什么......有人可以解释一下吗?我如何解决这个问题?

模拟:

  

我点击坐标x:100; y:100;并且drawRect在x:100上绘制rect; y:100;没关系,这就是我想要的。

使用setWantsLayer:是

  

我点击坐标x:100; y:100;并且drawRect在x:100上绘制rect; y:120; (或类似的东西)

我可以在没有将-setWantsLayer设置为YES的情况下使用CALayers吗?我正在尝试解决这个问题,但我不知道发生了什么......我需要你的帮助。

更新:我正在尝试解决这个问题,现在我做了很多测试...... 现在我可以说问题是-mouseDown:来自NSView,当我将-setWantsLayer设置为YES时,它不再像预期的那样工作......

我在我的窗口上有一个CustomView,我创建了一个NSView的子类并设置为CustomView类。 CustomView位于(0,20)位置。坐标方向不会翻转。

我相信当我设置NSView时想要图层-mouseDown:将帧更新到位置(0,0)(换句话说,它得到NSWindow帧)而不是(0,20)。当它出现在-mouseDown的每个位置时:在Y轴上增加20个点。我不知道我说的是对的,但是我的测试结果是事实。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

现在在(#macdev @ frenoode)的mikeash的帮助下,我解决了这个问题。

问题是我如何从-mouseDown:event转换点返回。我正在使用-convertPointFromBacking:和mikeash一样说:“问题是-convertPointFromBacking:对于转换从locationInWindow返回的点是不正确的”。 “因为locationInWindow不在'其像素对齐的后备存储坐标系'中。”

我改为-convertPoint:fromView:like:[sender convertPoint:[mEvent locationInWindow] fromView:nil];它工作得很好!

谢谢mikeash。

我在这里发布答案是为了帮助其他人解决同样的问题。