如何将NSPoint的y值翻转到翻转的坐标空间。Mac OS X可可,在全局屏幕坐标空间中翻转Y坐标
我分两个来源,无论是在全球屏幕空间,但一个被翻转:
一个从屏幕坐标空间0,0 =左上角。
一个从屏幕坐标空间0,0 =左下角。
我需要翻转第二个(左下角)与第一个左上角相同的空间。我怎么能在NSPoint或CGPoint上做到这一点?
如何将NSPoint的y值翻转到翻转的坐标空间。Mac OS X可可,在全局屏幕坐标空间中翻转Y坐标
我分两个来源,无论是在全球屏幕空间,但一个被翻转:
一个从屏幕坐标空间0,0 =左上角。
一个从屏幕坐标空间0,0 =左下角。
我需要翻转第二个(左下角)与第一个左上角相同的空间。我怎么能在NSPoint或CGPoint上做到这一点?
对于Mac OSX可可,你可以翻转y
协调的观点,只是重写isFlipped
返回YES
每个视图:
- (BOOL)isFlipped {
return YES;
}
比方说,你在底部的点左坐标空间,称为'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
如果您有多个显示器时,全局坐标空间的总高度可能大于任何单独显示器上的垂直高度。我发现有必要使用下面的代码(给出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)