10

だから私は NSRect を CGRect に変換しようとしています。すべてを細かくコピーするものを使用NSRectToCGRect()しましたが、y原点軸は考慮されていません。

問題: (0,0) の CGRect 原点は左上です。NSRect の原点 (0,0) は左下です。

したがって、NSRect (0,0,100,100)ボックスは画面の左下に配置され、CGRect (0,0,100,100)ボックスは画面の左上に配置されます。

基本的な数学を通じてy原点を修正するハックがあります:

fixedOriginY = screenHeight - NSRect.size.height - NSRect.origin.y

したがって、NSRect (0,0,100,100)実際には is に相当しCGRect (0,800,100,100)ます (私の 900px の高さの MBA では)。しかし、私はこれが好きではありません.壊れたり、網膜や将来の合併症に問題があると感じています.

NSRect を CGRect に正しく変換する方法について、解決策やアイデアを持っている人はいますか?

4

1 に答える 1

6

長方形の原点が左上か左下かは、長方形を使用する座標系によって異なります。CGRectまたはを使用するかどうかに依存しませんNSRect

通常、AppKit は左下隅が原点である座標系を使用します。同様に、CGContext作成した a は原点を左下に置きます。

一方、Quartz Event Services と Quartz Display Services は原点を左上に置きます。UIKit (iOS の場合) は原点を左上に置きます。サブクラス (OS X の場合) でオーバーライドisFlippedしてNSView、原点を左上に置くことができます。

四角形を従来の (左下の原点) 座標系から反転 (左上の原点) 座標系に変換する場合、基本的な計算が必要かつ適切です。

于 2013-06-12T05:46:25.687 に答える