IKImageViewの機能を、もっと紹介しよう。画像の回転、反転、拡大/縮小といった処理を行ってみる。
回転
画像の回転は、IKImageViewが持つrotationAngleというプロパティを設定することで、実現出来る。CGFloat型のプロパティになる。これを使うと、自由な角度に回転させることが出来る。回転と同時に中心位置を設定するためのメソッド、setRotationAngle:centerPoint:も用意されている。
IKImageView.h
@property CGFloat rotationAngle;
- (void)setRotationAngle:(CGFloat)rotationAngle centerPoint:(NSPoint)centerPoint;
または、IKImageViewが提供するアクションを使うことも出来る。回転に関するアクションとして、rotateImageLeft:とrotateImageRight:がある。これらを使えば、左に90度、または右に90度といった回転が可能だ。
実際にこれらのアクションをつなげ回転させてみたのが、次の実行結果だ。単に画像が回転するだけでなく、アニメーションエフェクトが加わっているのが分かるだろう。非常にリッチな操作感を与えてくれる。この機能の実現には、Core Animationが使われている。
反転
反転には、垂直軸での反転と、水平軸での反転が用意されている。これも、アクションが提供されているのでそちらを利用しよう。それぞれ、flipImageVertical:、flipImageHorizontal:になる。
拡大/縮小
拡大/縮小は、少しだけややこしい。
まず、アクションが提供されているのは同じだ。4つのアクションが提供されている。実サイズで表示するzoomImageToActualSize:、現在のビューのサイズにあわせて表示するzoomImageToFit:、ズームインするzoomIn:、そしてズームアウトするzoomOut:だ。ズームインとズームアウトでは、システムの所定の比率で拡大/縮小する。
もっと細かく制御したいときは、用意されているプロパティおよびメソッドを使う。現在の表示倍率を表すプロパティとして、zoomFactorがある。これに直接値を設定しても、拡大/縮小を行うことが出来る。または、拡大の中心位置を指定するためのメソッド、setImageZoomFactor:centerPoint:も利用出来る。
IKImageView.h
@property CGFloat zoomFactor;
- (void)setImageZoomFactor:(CGFloat)zoomFactor centerPoint:(NSPoint)centerPoint;
これだけなら簡単なのだが、もう一つ考慮しなくてはいけないものがある。自動リサイズモードだ。画像を表示するときは、常に指定した倍率(たとえば100%ならば常に100%)で表示したいときもあれば、ウインドウの大きさに合わせて自動的に倍率を変更したいときもあるだろう。これを制御するのが、自動リサイズモードになる。
IKImageViewには、自動リサイズモードのオン/オフをするために、autoresizesというプロパティがある。
IKImageView.h
@property BOOL autoresizes;
これをYESにしておけば、自動リサイズがオンになる。
では、自動リサイズがオンの状態で拡大/縮小のためのメソッドを呼ぶとどうなるか?ドキュメントには記述がないが、実験したところ、自動的に自動リサイズはオフになるようだ。任意の倍率設定と自動リサイズは、お互いに相反するモードなので、挙動としては正しいと言えるだろう。
ただし、autoresizesプロパティの値が変更されたことを通知する仕組みは、特に用意されていないようだ。ここは注意しておく点だろう。拡大/縮小を行った後は、自動リサイズモードの値に気をつけておきたい。