如何将NSPoint的y值翻转到翻转的坐标空间。
我有两个点来源,都在全局屏幕空间中,但有一个被翻转:
屏幕坐标空间中的一个,0,0 =左上角。
屏幕坐标空间中的一个,0,0 =左下角。
我需要将第二个(左下角)翻转到与左上角相同的空间。我怎么能在NSPoint或CGPoint上做到这一点?
答案 0 :(得分:3)
对于Mac OSX Cocoa,您可以翻转视图的y
坐标,只需覆盖isFlipped
即可为每个视图返回YES
:
- (BOOL)isFlipped {
return YES;
}
答案 1 :(得分:1)
假设您在左下角坐标空间中有一个点,称为“originalPoint”。要将此点翻转到左上角坐标空间,可以使用以下代码:
let screenFrame = (NSScreen.main()?.frame)!
let flippedY = screenFrame.size.height - originalPoint.y
let convertedPoint = NSPoint(x: originalPoint.x, y: flippedY)
我们也可以进行扩展:
extension NSPoint {
var flipped: NSPoint {
let screenFrame = (NSScreen.main()?.frame)!
let screenY = screenFrame.size.height - self.y
return NSPoint(x: self.x, y: screenY)
}
}
使用:
let flippedPoint = originalPoint.flipped
答案 2 :(得分:1)
如果您有多个显示器,则全局坐标空间的总高度可能大于任何单个显示器上的垂直高度。我发现有必要使用以下代码(给定originalPoint
)来找到:
let globalHeight = screens.map {$0.frame.origin.y + $0.frame.height}.max()!
let flippedY = globalHeight - originalPoint.y
let convertedPoint = NSPoint(x: originalPoint.x, y: flippedY)