誰かがiPhoneを振ったことをどうやって検出するのですか? 質問する

誰かがiPhoneを振ったことをどうやって検出するのですか? 質問する

誰かが iPhone を振ったときに反応したいです。どのように振ったかは特に気にしません。ほんの一瞬激しく振られただけです。これを検知する方法を知っている人はいますか?

ベストアンサー1

3.0 では、新しいモーション イベントにフックするという、より簡単な方法が採用されています。

主なコツは、シェイク イベント メッセージを受信するための firstResponder として必要な UIView (UIViewController ではない) を用意する必要があることです。以下は、任意の UIView でシェイク イベントを取得するために使用できるコードです。

@implementation ShakingView

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if ( event.subtype == UIEventSubtypeMotionShake )
    {
        // Put in code here to handle shake
    }

    if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
        [super motionEnded:motion withEvent:event];
}

- (BOOL)canBecomeFirstResponder
{ return YES; }

@end

これらのメソッドのみを使用してビューをサブクラス化するだけで、任意の UIView (システム ビューも含む) をシェイク イベントを取得できるビューに簡単に変換できます (その後、IB で基本タイプの代わりにこの新しいタイプを選択するか、ビューを割り当てるときにそれを使用します)。

ビュー コントローラでは、このビューをファーストレスポンダーになるように設定します。

- (void) viewWillAppear:(BOOL)animated
{
    [shakeView becomeFirstResponder];
    [super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
    [shakeView resignFirstResponder];
    [super viewWillDisappear:animated];
}

ユーザー アクションからファーストレスポンダーになる他のビュー (検索バーやテキスト入力フィールドなど) がある場合は、他のビューが辞任したときに、揺れているビューのファーストレスポンダー ステータスも復元する必要があることに注意してください。

この方法は、applicationSupportsShakeToEdit を NO に設定した場合でも機能します。

おすすめ記事