私はNSRectをCGRectに変換しようとしています。私はNSRectToCGRect()
を使用して細かくすべてをコピーしますが、y軸を考慮しません。NSRect対CGRect:y軸反転
問題:左上に(0,0)のCGRect起点があります。 NSRectの起点(0,0)は左下です。
したがって、CGRect (0,0,100,100)
ボックスは画面の左上に配置され、NSRect (0,0,100,100)
ボックスは画面の左下に配置されます。
私は基本的な数学を通じてY-起源を修正するハックを持っている:
fixedOriginY = screenHeight - NSRect.size.height - NSRect.origin.y
したがってNSRect (0,0,100,100)
の同等は(私900px高さMBAに)実際にCGRect (0,800,100,100)
です。しかし、私はこれが好きではありません、私はそれが網膜または将来の合併症で問題を壊す/持っているという気持ちがあります。
誰でも、NSRectをCGRectに正しく変換する方法についての解答がありますか?
CoreGraphicsは左上に原点を持っていると思いますか?間接的な参照のみがすぐに見つかりますが、http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GraphicsDrawingOverview/GraphicsDrawingOverview.html - テキストの検索「使用されているデフォルトの座標系Core GraphicsフレームワークはLLOベースです。 (LLO =左下原点) – Tommy
NSWindowフレームプロパティはNSRectなので、0,0(左下の画面)に配置します。そのフレームをCGRectに変換し、CGDisplayCreateImageForRect([0]、windowCGRectを表示)を使ってスクリーンショットを撮ります。スクリーンショットは画面の左上にあります。 – user339946
'CGRect'と' NSRect'の違いとは考えません。それらは単純な構造体の両方であり、その値はある種の座標系(矩形を提供したり消費したコードのどちらか)に対してのみ意味を持ちます。この場合、[この回答](http://stackoverflow.com/a/14228817/1218876)で説明されているように、AppKitの画面座標系とCGの表示空間座標系の違いになります。 –