[XCODE] iPhone シェイクジェスチャーを認識する方法
こんにちは、@yoheiMuneです。
iPhoneアプリでシェイクジェスチャーを利用する方法を調べたので、ブログに書きたいと思います(・∀・)
ここに記載された方法は、iOS3.0以降で利用可能です。
(グランドキャニオンの写真)
まずは、UIResponderクラスの以下メソッドをオーバーライドして、FirstResponderになる権利を主張します(`・ω・´)
続いて、Viewを表示する際に、FirstResponderになるようにメソッドを実装します。
これで、モーションイベントを受け取る準備が整いました。
- motionBegan:withEvent:
- motionEnded:withEvent:
今回は、「motionEnded:withEvent:」メソッドを利用して、シェイクジェスチャーを認識します。
以下の例では、シェイクジェスチャーを認識したら、新しい画面を表示しています。
引数のUIEventSubtypeの種類が「UIEventSubtypeMotionShake」であれば、 シェイクジェスチャーが発生したという状態と判断出来ます。
iOSイベント処理ガイド (第4章 モーションイベント)
iPhoneアプリでシェイクジェスチャーを利用する方法を調べたので、ブログに書きたいと思います(・∀・)
ここに記載された方法は、iOS3.0以降で利用可能です。
(グランドキャニオンの写真)
UIResponderクラスのモーションイベントを利用する
UIViewControllerなどが実装しているUIResponderクラスでは、iOS3.0以降、 モーションイベントというものをサポートしています。 モーションイベントは、シェイクジェスチャーやリモートコントローラー(音楽の再生・停止など)の 動作を受けると、特定のイベントを呼び出します。モーションイベントを利用する事前準備
モーションイベントを利用する為には、現在のクラス(UIViewControllerなど)が、 最初にイベントを受け取る状態にする必要があります。 今回は、UIViewControllerにてモーションイベントを扱う方法を記載します。まずは、UIResponderクラスの以下メソッドをオーバーライドして、FirstResponderになる権利を主張します(`・ω・´)
- (BOOL)canBecomeFirstResponder { return YES; }
続いて、Viewを表示する際に、FirstResponderになるようにメソッドを実装します。
- (void)viewDidAppear:(BOOL)animated { [self becomeFirstResponder]; }
これで、モーションイベントを受け取る準備が整いました。
モーションイベントを扱う
モーションイベントを扱う為には、UIResponderの以下2つのメソッドのどちらか(必要ならば両方を) オーバーライドします。- motionBegan:withEvent:
- motionEnded:withEvent:
今回は、「motionEnded:withEvent:」メソッドを利用して、シェイクジェスチャーを認識します。
以下の例では、シェイクジェスチャーを認識したら、新しい画面を表示しています。
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { // モーションがシェイクジェスチャーの場合には、新しい画面を開く if (motion == UIEventSubtypeMotionShake) { [self showNewView]; } }
引数のUIEventSubtypeの種類が「UIEventSubtypeMotionShake」であれば、 シェイクジェスチャーが発生したという状態と判断出来ます。
参考文献
以下の資料を参考にさせて頂きました。ありがとうございます。iOSイベント処理ガイド (第4章 モーションイベント)