2016-01-13 15 views
5

Wie kann ich in Swift ein Gerätewackeln im AppDelegate (über die gesamte App hinweg) erkennen?Erkennen von Verwacklungen in AppDelegate

Ich habe Antworten gefunden, die beschreiben, wie man das in einem View-Controller macht, aber ich möchte dies in meiner App tun.

+2

Mögliche Duplikat AppDelegate [Wie erkenne ich, wenn jemand ein iPhone schüttelt?] (Http://stackoverflow.com/questions/150446/how-do-i-detect- when-someone-shakes-an-iphone) – fishinear

Antwort

7

folgenden Ausschnitt in Ihrem AppDelegate hinzufügen:

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

Swift 3.0 Version:

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

Dies hat nicht funktioniert, da der App-Delegat nicht in der Responder-Kette ist. – phatmann

+0

Funktioniert nicht in swift3 –

+0

@SaRaVaNaNDM, sicher ist es nur getestet und getestet haben. Hast du Fehler bekommen? Wie hast du es umgesetzt? –

6

Wenn Sie schütteln Bewegung global erkennen soll, die UIWindow implementiert UIResponder die Shake empfangen können Bewegungsereignis. Sie können das folgende Snippet hinzufügen

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

Das hat für mich funktioniert. Sie einfach hinzuzufügen (ohne die UIWindow-Erweiterung) funktionierte nicht, wenn ich sie in den App-Delegaten legte. Ich musste 'open' vor func für iOS 10.3/Xcode8.3 hinzufügen. –

+0

Ziemlich seltsam, motionBegan wird aufgerufen, aber motionEnded nicht. – User9527