Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从窗口坐标转换NSPoint_Objective C_Macos_Cocoa_Webview - Fatal编程技术网

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已被弃用。肯的回答更正确。