我是Swift和MacOS的新手,我会找到一个方法来获得精确的显示坐标
NSEvent.mouseLocation
我在CoreGraphic中找到了方法:
func CGDisplayBounds(_ display: CGDirectDisplayID) -> CGRect
但是坐标不同。
我可以变通地应用一种方法到数学方法来转换点Y。但是有没有任何方法可以通过编程来获取或转换位置?
我希望使用NSEvent.mouseLocation获得相同的坐标。
谢谢大家的关注。
它将返回到与鼠标位置相同的坐标。
1条答案
按热度按时间fdbelqdn1#
正如你所注意到的,CoreGraphics拥有苹果所谓的"翻转"几何结构,原点位于屏幕左上方,y坐标向屏幕底部递增。这是大多数计算机图形系统使用的几何结构。
AppKit更喜欢苹果所谓的"非翻转",原点在左下方,y坐标朝屏幕顶部递增,这是数学中常用的几何图形。
CoreGraphics全局几何图形的原点(0,0)始终位于"主"显示屏的左上方(由
CGMainDisplayID()
标识)。AppKit全局几何图形的原点始终位于主显示屏的左下方。要在两个几何图形之间转换,请从主显示屏的高度中减去y坐标。即:
你可能会注意到这两个函数有相同的实现,你并不真的需要两个函数;你可以只使用一个。它可以双向转换。
调用
CGDisplayBounds(CGMainDisplayID())
也可能是低效的。如果你要做很多转换,你可能需要缓存值或者批处理转换。但是如果你缓存值,你需要订阅NSApplication.didChangeScreenParametersNotification
,这样你就可以在需要改变的时候更新缓存的值。