2012-07-31 9 views
8

を行く、私はこれらの結論:CGAffineTransformの回転は私の実験では間違った方法

YourView.transform = CGAffineTransformMakeRotation(positive value); 

は、ビューを時計回りに回転し、そして

YourView.transform = CGAffineTransformMakeRotation(Negative value); 

は反時計回りにビューが回転します、

しかし、ドキュメントの内容:

アフィントランスフォームを回転させる角度(ラジアン単位) rm。 iOSでは、正の値は反時計回りの回転を指定し、負の値は時計回りの回転を指定します。

これらは互いに矛盾しますか?

+0

ive今すぐテストしても同じ結果が得られます。文書は、OSXにおいてこの動作を有することを指定している。あなたが言ったように、非常に奇妙ではありません。 – Pochi

+0

'value'happenをπ/ 2にしますか? –

+0

@bigitia:はい、私はπ/ 2と-π/ 2を試しました – romox

答えて

23

あなたの混乱はかなり理解できます。

実際には、正の角度は、正のX軸から正のY軸に向かう回転を表します。負の角度は、正のX軸から負のY軸に向かう回転を表します。

"ネイティブ"コアグラフィックス座標系は標準Cartesian coordinate systemの後にモデル化され、Y軸はページ上でを上向きにしてになります。このシステムでは、正の角度は反時計回りの回転を表し:あなたはCGContext独自に作成する場合は、期待どおり

normal coordinate system

ので(例えば、CGBitmapContextCreateまたはCGPDFContextCreateを使用することにより)、回転が動作します。

しかし、コンピュータシステムでは、Y軸がページ上での下向きのに増加する座標系を歴史的に使用していました。このような座標反転系において、正の角度は時計回りの回転を表す:座標系の両方において、正の角度は、正のY軸に向かって正のX軸から回転する

flipped coordinate system

お知らせ。

UIKitは、作成したグラフィックスコンテキストの座標系を反転させることが判明しました。これには、drawRect:を送信する前に設定したグラフィックスコンテキストと、UIGraphicsBeginImageContextに設定するグラフィックスコンテキストが含まれます。 (Quartz 2D Programming Guideはこれについて説明しています)現在の変換行列(CGContextGetCTMを使用)を見ることでこれを確認できます。 d要素に-1という要素があります。つまり、Y軸が反転しています。

UIViewは、UIViewtransformプロパティの意味に影響を与えるサブビューをレイアウトするために、反転座標系も使用します。

+0

thxたくさんありがとう! – romox

+1

しかし、そのような反転座標系では正の角度は時計回りの回転を表しますが、ドキュメントでは「iOSでは正の値が反時計回りの回転を指定しています」だから私はまだそれは矛盾していると思う。ドキュメントは間違っていますか? – romox

+0

時々間違っています。変換を使用するコンテキストによって異なります。 –

関連する問題