2016-01-13 8 views
5

SwiftでAppDelegateのデバイスの揺れを(アプリケーション全体で)どのように検出できますか?AppDelegateでの揺れの検出

私は、View Controllerでこれを行う方法を説明していますが、私のアプリ全体でそうしたいと考えている回答が見つかりました。

+2

可能な重複[誰かがiPhoneを振るとき、私は検出する方法は?](http://stackoverflow.com/questions/150446/how-do-i-detect-をAppDelegateには、以下のスニペットを追加することができますwhen-someone-shakes-an-iphone) – fishinear

答えて

7

あなたAppDelegateに次のコードを追加します。

override func motionBegan(motion: UIEventSubtype, withEvent event: UIEvent?) { 
    if motion == .MotionShake { 
     print("Device shaken") 
    } 
} 

スウィフト3.0バージョン:

override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) { 
    if motion == .motionShake { 
     print("Device shaken") 
    } 
} 
+2

これは機能しませんでした。これは、アプリケーションデリゲートがレスポンダーチェーンにないためです。 – phatmann

+0

swift3で動作していません –

+0

@SaRaVaNaNDM、これは単にテストされており、以前にテストされていることを確認してください。何かエラーがありましたか?どのように実装しましたか? –

6

あなたが手ぶれ動きを検出グローバルにしたい場合は、UIWindowはUIResponderを実装して手ぶれを受け取ることができますモーションイベント。あなたは

extension UIWindow { 
    open override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) { 
     if motion == .motionShake { 
      print("Device shaken") 
     } 
    } 
} 
+0

これは私のために働いた。それを(UIWindow拡張なしで)追加するだけで、アプリケーションデリゲートに入れても機能しませんでした。 iOS 10.3/Xcode8.3のfuncの前に 'open'を追加しなければなりませんでした。 –

+0

かなり違って、motionBeganが呼び出されますが、motionEndedは呼び出されません。 – User9527

関連する問題