Objective c 从窗口坐标转换NSPoint
我正在覆盖Objective c 从窗口坐标转换NSPoint,objective-c,macos,cocoa,webview,Objective C,Macos,Cocoa,Webview,我正在覆盖WebView子类中的draggingUpdated:。通过这种方式,我可以获得当前拖动目标为[(id)发送方拖动位置] 我想获取这个NSPoint并将其“转换”为WebView中的坐标,然后使用WebView的elementAtPoint: 问题是,我得到了NSPoint,我还得到了WebView的边界/框架。这辆敞篷车怎么样?好的,哇。刚刚遇到一个案例,可可看起来非常神奇: [self convertPointFromBase:point]; 是的,仅此而已。为此使用-conve
WebView
子类中的draggingUpdated:
。通过这种方式,我可以获得当前拖动目标为[(id)发送方拖动位置]
我想获取这个NSPoint
并将其“转换”为WebView
中的坐标,然后使用WebView
的elementAtPoint:
问题是,我得到了
NSPoint
,我还得到了WebView的边界/框架。这辆敞篷车怎么样?好的,哇。刚刚遇到一个案例,可可看起来非常神奇:
[self convertPointFromBase:point];
是的,仅此而已。为此使用
-convertPointFromBase:
是不正确的。该方法已被弃用,建议的替换(-convertPointFromBacking:
)不适用于此目的,因为它假定输入点位于backing store坐标系中。(这实际上暗示了-convertPointFromBase:
的原始用途,它是现已废弃的Leopard时代尝试提供高分辨率支持的一部分。它转换的“基础坐标系”应该是像素对齐的。搜索“像素对齐”并将视图坐标转换为“基础”空间中的“空格”。)
您需要
-convertPoint:fromView:
,并且应该为fromView
参数传递nil
。请看。我知道这很旧,但值得一提的是,这还需要翻转Y坐标。WebView的内容具有左上角的原点。AppKit使用左下角。@uchuugaka,我不知道WebView,但该方法已经处理翻转视图。接收器知道它是否翻转(并且可以查询它和窗口之间的所有祖先),并相应地正确地转换点。这个方法确实做到了它所说的。它将窗口坐标中的一个点转换为视图自身坐标系中的一个点。@Kenthomass您真是太棒了,而且总是在屏幕上!WebView没有翻转,但DOM脚本中的坐标是!这是一篇老文章,但仍然不好。此外,convertPointFromBase已被弃用。肯的回答更正确。