[XCODE] ローテーションジェスチャーを簡単に実装する
こんにちは、@yoheiMuneです。
今日は、iPhoneアプリケーションにおいて、簡単にローテーションジェスチャーを実装する方法を学んだので、ブログに残しておきたいと思います。
ローテーションジェスチャーとは
画面要素をくるくると回したいときに使うあれです。2本指で画面に触れ、2本指の距離を変えずに、指で円を描くように動くやり方です。
今日は、以下のような画面において、指の動き(ローテーションジェスチャー)に合わせて、表示されているUIImageViewを回転させます。
ローテーションジェスチャーを実装する
UIGestureRecognizerのひとつ、UIRotationGestureRecognizerを利用します。これを利用する事で、ローテーションジェスチャーが発生した際に、指定したメソッドを呼び出すことが出来ます。以下が、UIRotationGestureRecognizerの使用例です。
- (void)viewDidLoad { [super viewDidLoad]; // インスタンス作成時に、ローテーションジェスチャー発生時に呼びだすメソッドを指定する UIRotationGestureRecognizer *rotation = [[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)] autorelease]; // ローテーションジェスチャーをUIViewに設定する [self.view addGestureRecognizer:rotation]; }
ローテーションジェスチャーが発生したら
以下のメソッドが呼び出されるように、上記で実装しました。このメソッド内では、回転量を取得して、その回転量に応じて、UIImageViewを回転させています。
このメソッドは、ローテーションジェスチャー発生中に、何度も呼び出されます。
- (void)rotationAction : (UIRotationGestureRecognizer *)sender { // 回転した量を取得する。ここで取得出来るのは、radianという単位の値。 // radianの詳細は、[wiki:ラジアン]を参照してください。 CGFloat rotation = [sender rotation]; // imgViewは回転対象のUIImageView。 // CGAffineTransformMakeRotation関数を利用して、移動したradian分、imgViewを回転させる imgView.transform = CGAffineTransformMakeRotation(rotation); }
参考
以下を参考にしました。ありがとうございます。
UIRotationGestureRecognizer Class Reference
最後に
Viewの回転って難しそうでしたが、意外と簡単に出来ました。ヨカタヨカタ♪(´ε` )
でもアフィン変形は難しそう。これから多用するだろうから、学ばねば。数学は、やっぱり必要なんですね。