9

私の実験では、私はこれらを結論付けます:

YourView.transform = CGAffineTransformMakeRotation( positive value ); 

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

YourView.transform = CGAffineTransformMakeRotation( Negative value ); 

ビューを反時計回りに回転します。

しかし、ドキュメントには次のように書かれています。

アフィン変換を回転させる角度(ラジアン)。iOSでは、正の値は反時計回りの回転を指定し、負の値は時計回りの回転を指定します。

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

4

1 に答える 1

25

あなたの混乱は非常に理解できます。

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

「ネイティブ」コアグラフィックス座標系は、Y軸がページ上で上向きに増加する標準のデカルト座標系をモデルにしています。このシステムでは、正の角度は反時計回りの回転を表します。

通常の座標系

したがって、独自に作成する場合CGContext(たとえば、CGBitmapContextCreateまたはを使用してCGPDFContextCreate)、回転は期待どおりに機能します。

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

反転座標系

両方の座標系で、正の角度が正のX軸から正のY軸に向かって回転することに注意してください。

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

AUIViewは、サブビューのレイアウトに反転座標系も使用します。これは、UIView transformプロパティの意味に影響します。

于 2012-07-31T03:30:23.513 に答える