2012/01/04更新

[XCODE] iPhone シェイクジェスチャーを認識する方法

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
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章 モーションイベント)




最後に

タップ以外にも、シェイクジェスチャーなど色々な入力イベントがあるのは、 スマートフォンの強みですね。様々なイベントを有効に活用出来ると、 PC以上に使いやすいUIを作れそうです。






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。