Eyes, JAPAN Blog > iOSのジェスチャーについて

iOSのジェスチャーについて

kaneda

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

みなさん、こんにちは。
関東が梅雨入りしたりと、6月らしくなってきましたが、いかがお過ごしでしょうか。

今日は、昨日にAndroidのタッチイベントの紹介をしていたので、iOSでのタッチイベントであるUIGestureRecognizerについて紹介したいと思います。
Androidでは素晴らしいタッチイベントを検出できると書いてありましたが、iOSでももちろんこれらのイベントは全て検出可能です。更には、自分で検出方法をカスタマイズする事ができるなど、汎用性も高い機能となっています。

iOSが標準で提供している機能は以下の通りです:

・UITapGestureRecognizer -> タップ検出、通常のタップ(画面タッチ)を検出する
・UIPinchGestureRecognizer -> ピンチ検出、画面を拡大縮小する際に用いる2本指での拡大縮小のイベントを検出する
・UIRotationGestureRecognizer -> 回転検出、ピンチに似た機能で、拡大縮小ではなく回転させたかどうかを検出する
・UISwipeGestureRecognizer -> スワイプ検出、スクロールに似ているが、瞬間的な上下左右への指の動きを検出する
・UIPanGestureRecognizer -> ドラッグ検出、対象のオブジェクトがドラッグされたか等を検出する
・UIScreenEdgePanGestureRecognizer -> エッジからのドラッグ検出、iOS7から追加された機能で、画面縁からドラッグした際に検出する
・UILongPressGestureRecognizer -> 長押し検出、画面の長押しを検出する

各機能は、それぞれ特有のパラメータを持っており、例えばUITapGestureRecognizerの場合は、
・何本指でタップした際に検出するか
・何回タップされた際に検出するか
等を設定する事が出来ます。
その他は、UILongPressGestureRecognizerでは上のUITapGestureRecognizerに加え
・何秒以上押されている場合を長押しとするか
・長押しでも何ポイント指をずらした場合に長押しと検出しないか
等、様々なカスタマイズが可能です。

これらのカスタマイズをうまく活用する事で、同じアプリでも子供からお年寄りまでと言った、それぞれの年代の特性を生かしたイベントを設定する事が可能です。
例えば、我々のような青年だと、普通にスマフォに使い慣れているから通常の設定でも大丈夫だけれども、お年寄りの場合は少しゆっくりめにイベントの検出を設定する事で誤動作を防ぐ事が出来るはずです。
もちろん、開発者がこれらの事を考えなければ宝の持ち腐れとなってしまうわけですが、しっかりと特徴を生かせれば、それだけで優位になり得ますね。

イベント検出時は、iOSアプリ開発者なら知っての通りデリゲートを使ってイベントを検出する事が可能です。
デリゲートとしては、

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

を使ってイベントを検出する事が可能です。
イベントを複数使っている場合は、メソッド内でしっかり分ける必要がありますが、それは難しくないはずでしょう。
これ以外にもデリゲートメソッドはいくつかあるので、気になる人はXCodeで見てみるか、ぐぐってみれば説明しているページが出てくると思います。

また、これらのジェスチャーはiOS3.2から実装されたのですが、それ以前はジェスチャーを検出できなかったのかと言えば、そうではありません。
今もなお残っている機能として、

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

があります。これは、タッチ開始時、移動時、終了時、キャンセル時等に呼ばれるメソッドであり、eventで処理を確認する事が可能でした。もちろん、場合によっては今でもこちらの方法で開発した方が良い事はありますが、こちらの方法は上級者向けと言え、そのような場合は最近では滅多にないので、使う機会はほとんどないかもしれません。
提供されているジェスチャー以外を使いたいと思ったときは、ふと思い出す程度で良いでしょう。

このように、iOSでは多種多様なジェスチャーが提供されていて、カスタマイズ性も高いと言えます。iOSアプリ開発をする際は、特性をしっかりと理解した上で使いこなせる様にしましょう。

担当: 金田 (Swiftは流し読みしただけなのですが、すっきりしたコードでアプリ開発が出来るなーと思いました

Comments are closed.