新人奮闘記18
iOS入門
今回は、前回の記事でジェスチャーについて書きましたが、その中の一部を実装してみたいと思います。
スワイプ
UISwipeGestureRecognizer
StoryBordで上下左右にスワイプを検知する場合
SwipeGestureRecognizerをStoryBordへ配置し、ソースに接続するだけで、簡単にスワイプの方向を検知する事ができます。
この時、AttributeInspecterタブでスワイプの方向を指定する事が必要で、検知したい方向を設定します。Leftとすれば、左スワイプのみの検知となり、接続先のソースが実行されます。
ストーリーボードを使えば実装が容易ですが、方向毎にメソッドを定義する事になるので、なんとかならないかとソースコードでの実装も行ってみました。
この方法では、あらかじめ4方向を登録し、21行目にてセレクターで指定した任意のメソッド、directSwipedを選択し、そのメソッド内で、方向毎に処理を分けるバターンで書いてみました。また、マルチタッチとしたい場合は、numberOfTouchesRequired = 2とする事で、2本指でスワイプを定義する事ができます。この場合2本指以外だと認識されません。
ピンチイン、アウト
UIPicnchGestureRecognizer
ピンチインも同じ要領で実行する事が可能で、画像の拡大,縮小機能として使えそうなので記述します。
※アフィン変換については割愛します。
ジェスチャーの開始時のみ、変換後の画像を保持します。
長押し
UILongPressGestureRecognizer
UIGestureRecognizerStateにて、ジェスチャーの状態を知る事ができ、それを用いて判定しています。beganはロングタップの開始、endedで終了時の処理を振り分けてみました。
また、ロングタップの場合、どこからがロングタップの開始になるのかという疑問を持ちましたが、デフォルトでは0.5秒に設定されており、MinDuration にて 容易に設定する事ができました。
まとめ
- ・ジェスチャーイベントを実装する時、UIGestureRecognizerのサブクラスを利用し、提供されているイベントは、Tap,Pinch,Ratation,Swipe,Pan,ScreenEdge,LongPressの7種類で必要毎に、定義し実装を行う。
- ・各ジェスチャーの開始、終了を判定する事で、よりきめ細かく振る舞いを定義する事ができるので、タップ中は、~を行い、指を離すと、処理を停止し、値を保持するといった事が出来そうです。
- ・ピンチイン、ピンチアウトを実装する場合は、拡大、縮小に加え、対象物のサイズを保持しておかないと、元のサイズに戻ってしまうので、必ず保持するような実装を行う。
- ・スワイプはStoryBordで実装するかソースで記述するかですが、4方向など複数の方向を扱う場合においては、ソースで記述する方が、セレクターで指定するメソッドも一つで済むので、簡潔で良いかと思いました。
- ・またソースで記述する場合の書き方も基本的には、同じで、ジェスチャーの種類を定義し、対象と実行するメソッドを決定し、登録する流れとなります。
その他にもドラッグや回転などのジェスチャーイベントもありますが、随時更新していきたいと思います。
admin at 2016年11月02日 10:00:52