2016-01-13 111 views
5

如何在Swift中檢測AppDelegate中的設備震動(跨整個應用程序)?在AppDelegate中檢測抖動

我已經找到了描述如何在視圖控制器中這樣做的答案,但是希望在我的應用程序中這樣做。

+2

的可能的複製[當有人動搖的iPhone如何檢測?(http://stackoverflow.com/questions/150446/how-do-i-detect-當別人搖一搖一個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可以接收震運動事件。您可以添加以下代碼段的appdelegate

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