2011-08-01 26 views
0

NSPointのy値を反転した座標空間にどのように置きますか?Mac OS X Cocoa、グローバル画面座標空間でY座標を反転する

Iは、両方のグローバル画面空間に、点の2つのソースを持っているが、一方が反転される。

  1. 一つの画面から0,0 =左上と座標空間。

  2. 0,0 =左下のスクリーン座標空間からのもの。

第2のもの(左下)を最初のものと同じスペースに置く必要があります(左上)。どのように私はNSPointたりするCGPointにそれを行うことができますか?

- (BOOL)isFlipped { 
    return YES; 
} 

答えて

0

マックOSXココアのために、あなたはyだけのビューごとにYESを返すようにisFlippedをオーバーライドし、ビューの座標反転することができます'オリジナルポイント'。

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

のは、あなたは下のポイント座標空間を左に持っているとしましょう、と呼ばれる:

0

ますもし我々はまた、拡張を行うことができます

let screenFrame = (NSScreen.main()?.frame)! 
let flippedY = screenFrame.size.height - originalPoint.y 
let convertedPoint = NSPoint(x: originalPoint.x, y: flippedY) 

:座標空間左上にこの点を反転するには、次のコードを使用することができますグローバル座標空間の全体の高さは、個々のディスプレイの垂直高さよりも大きくなることがあります。次のコード(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) 
関連する問題