2016-01-13 15 views
5

Come posso rilevare un tremito del dispositivo in AppDelegate (attraverso l'intera app) in Swift?Rilevamento dello shake in AppDelegate

Ho trovato risposte che descrivono come farlo in un controller di visualizzazione, ma cercando di farlo attraverso la mia app.

+2

Eventuali duplicati di [Come faccio a rilevare quando qualcuno scuote un iPhone?] (Http://stackoverflow.com/questions/150446/how-do-i-detect- quando-qualcuno-scuote-un-iphone) – fishinear

risposta

7

Aggiungere il seguente frammento nel AppDelegate:

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

Swift 3.0 Versione:

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

Questo non ha funzionato, dal momento che il delegato dell'app non si trova nella catena del risponditore. – phatmann

+0

Non funziona in swift3 –

+0

@SaRaVaNaNDM, sicuro che è stato appena testato e testato prima. Hai avuto errori? Come lo hai implementato? –

6

Se si vuole globalmente rilevare il movimento scossa, l'UIWindow implementa UIResponder che possono ricevere scossa evento di movimento. È possibile aggiungere il seguente frammento di AppDelegate

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

Questo ha funzionato per me. La semplice aggiunta (senza l'estensione UIWindow) non ha funzionato quando l'ho inserito nel delegato dell'app. Dovevo aggiungere 'open' di fronte a func per iOS 10.3/Xcode8.3. –

+0

Piuttosto strano, motionBegan viene chiamato, ma motionEnded no. – User9527

Problemi correlati