我有一个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个点。我不知道我说的是对的,但是我的测试结果是事实。
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
现在在(#macdev @ frenoode)的mikeash的帮助下,我解决了这个问题。
问题是我如何从-mouseDown:event转换点返回。我正在使用-convertPointFromBacking:和mikeash一样说:“问题是-convertPointFromBacking:对于转换从locationInWindow返回的点是不正确的”。 “因为locationInWindow不在'其像素对齐的后备存储坐标系'中。”
我改为-convertPoint:fromView:like:[sender convertPoint:[mEvent locationInWindow] fromView:nil];它工作得很好!
谢谢mikeash。
我在这里发布答案是为了帮助其他人解决同样的问题。