如何將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)