2011-08-01 103 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)