2011-08-01 53 views
0

如何將NSPoint的y值翻轉到翻轉的座標空間。Mac OS X可可,在全局屏幕座標空間中翻轉Y座標

我分兩個來源,無論是在全球屏幕空間,但一個被翻轉:

  1. 一個從屏幕座標空間0,0 =左上角。

  2. 一個從屏幕座標空間0,0 =左下角。

我需要翻轉第二個(左下角)與第一個左上角相同的空間。我怎麼能在NSPoint或CGPoint上做到這一點?

回答

0

對於Mac OSX可可,你可以翻轉y協調的觀點,只是重寫isFlipped返回YES每個視圖:

- (BOOL)isFlipped { 
    return YES; 
} 
0

比方說,你在底部的點左座標空間,稱爲'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 
0

如果您有多個顯示器時,全局座標空間的總高度可能大於任何單獨顯示器上的垂直高度。我發現有必要使用下面的代碼(給出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)