CGAffineTransformの使い方
[以前別のブログに書いた記事ですがこちらに再掲]
CGAffineTransformあたりを使うと回転、拡大、縮小、平行移動などの操作を行うことができます。仕様、ポイントなどをメモしておきます。
CGAffineTransformの基本
アフィン変換自体はC言語の構造体として定義されています。その中身は3行3列の行列ですが、普段はあまり意識する必要はなさそうです。
UIImageViewのインスタンスとしてmyViewがあるとき、2倍に拡大する方法
CGAffineTransform trans;
trans = CGAffineTransformMakeScale( 2, 2); // x,y2倍に拡大
myView.transform=trans;
拡大し、さらに90度回転
CGAffineTransform trans;
trans = CGAffineTransformMakeScale( 2, 2);
trans = CGAffineTransformRotate( trans, 3.14/2); //90度回転,単位はラジアン
myView.transform = trans;
行列なので上記のように回転させて、さらに拡大させるといった操作が簡単に出来ます。その場合は元になるアフィン変換をさらにCGAffineTransformRotateなどで変換させます。
CGAffineTransformMakeScaleなどMakeと付いている関数は全て新規にアフィン変換を作成するので、既存のアフィンを引数として受け取れません。Makeが付いてないCGAffineTransformScaleなどは第一引数に元になるアフィン変換を受け取ることが出来ます。自分はこの辺の区別が最初わからずハマりました。
自分の意図したアフィン変換が出来たら、変換したいUIImageViewなどにtransformプロパティを使って設定すればビューの拡大、回転などの変換が出来ます。
アフィン変換が既に適用されているか、いないかを調べる
CGAffineTransformIsIdentityを使えば対象のオブジェクトが変換しているか、いないかが分かります。CGAffineTransformIsIdentityの返り値はBOOL値で無変換であればtrueを、変換済みであればfalseを返してきます。具体的には下記のように記述します。
if ( CGAffineTransformIsIdentity (myView.transform) ){
//アフィン変換していない時の処理
}
初期状態に戻したい場合は無変換のアフィン変換にする
アフィン変換を適用する前の初期状態に戻したい場合はCGAffineTransformIdentityを用います。これの中身は単位行列になっています。なので、こいつを適用すれば拡大、回転などが適用されていない初期状態に戻すことが出来ます。