はてなブックマークに追加

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
はてなブックマークに追加

回転のジェスチャを取得する


iOS 3.2以前にローテイト(回転)やスワイプなどの
ジェスチャを取得するためにはtouchesMoved:withEvent:
の中に、自前で取得のためのプログラムを実装する必要がありました。

iOS 3.2からはUIGestureRecognizerというクラスが追加され、
非常に簡単にユーザのジェスチャを取得できるようになりました。

回転のジェスチャを取得する例を下に示します
- (void)viewDidLoad {
[super viewDidLoad];

UIRotationGestureRecognizer* rotationGesture =
[[UIRotationGestureRecognizer alloc] initWithTarget:
self action:@selector(didRotationGesture:)];
[self.view addGestureRecognizer:rotationGesture];
[rotationGesture release];
}

-(void) didRotationGesture:(UIRotationGestureRecognizer*) sender {
UIRotationGestureRecognizer* rg =
(UIRotationGestureRecognizer*) sender;
NSLog(@"rotate:%f", rg.rotation);
}


viewDidLoad関数の中で、UIRotationGestureRecognizerクラスの
インスタンスを作成し、Viewにジェスチャとして登録します。
インスタンスには、回転のイベントが発生したときにトリガされる関数を
登録しておきます。

上のプログラムではトリガ関数としてdidRotationGestureを作成しました。
引数から回転角などを得ることが出来ます。


毎度おなじみの彼を回転させてみました。笑

UIGestureRecognizer1.jpg

このように、UIImageViewやUIViewを回転させる場合には
コールバック関数の中で次のように書けばよいでしょう。

-(void) didRotationGesture:(UIRotationGestureRecognizer*) sender {  
UIRotationGestureRecognizer* rg =
(UIRotationGestureRecognizer*) sender;
[imageView setTransform:
CGAffineTransformRotate(prevTransform, rg.rotation)];
}


prevTransformは前回の回転イベントが終了した時の姿勢です。
touchesEndedの中などで、保存しておけばよいでしょう。
また、デフォルトではマルチタッチイベントは取得されない設定になっているので
IBでマルチタッチを有効にしておく必要があります。

UIGestureRecognizer2.jpg


UIGestureRecognizerを用いれば、回転だけでなく
タップ・ピンチイン・ピンチアウト・パン・スワイプ
ローテイト・ロングプレス
などのイベントも取得することが出来ます。

これらのイベントも回転のイベントと同様の方法で
取得できるので、ぜひ実験してみてください。

スポンサーサイト

コメントの投稿

非公開コメント

開発アプリ

iDOF 色影 ラテアート ぱすてる

プロフィール

Author:hokuson
京都在住。iPhoneアプリ「色影」や「iDOF」の開発者。アプリのレビューとかもしてみる。博士後期課程@R大学。ついに就職活動なるものをしなければいけないらしい。誰か雇ってください。笑。

カレンダー
09 | 2017/03 | 10
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
カテゴリ
最新コメント
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。