2016-01-13 13 views
5

Jak wykryć drgania urządzenia w AppDelegate (w całej aplikacji) w Swift?Wykrywanie drgań w AppDelegate

Znalazłem odpowiedzi opisujące, jak to zrobić w kontrolerze widoku, ale szukając tego w mojej aplikacji

+2

Możliwy duplikat [W jaki sposób wykryć, kiedy ktoś kręci iPhone?] (http://stackoverflow.com/questions/150446/how-do-i-detect- when-someone-shakes-an-iphone) – fishinear

Odpowiedz

7

Dodaj następujący fragment w AppDelegate:

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

Swift 3.0 wersja:

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

To nie działało, ponieważ delegat aplikacji nie znajduje się w łańcuchu respondentów. – phatmann

+0

Nie działa w swift3 –

+0

@SaRaVaNaNDM, na pewno testowany i przetestowany wcześniej. Czy pojawiły się jakieś błędy? Jak to wdrożyłeś? –

6

Jeśli chcesz globalnie wykrywania drgań ruchu, UIWindow realizuje UIResponder które mogą odbierać drgania wydarzenie ruchu. Możesz dodać następujący fragment do AppDelegate

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

To zadziałało dla mnie. Dodanie go (bez rozszerzenia UIWindow) nie zadziałało, gdy umieściłem go w delegacie aplikacji. Musiał dodać 'otwarte' przed func dla iOS 10.3/Xcode8.3. –

+0

Dość dziwne, callBegan zostaje wywołany, ale motionEnded nie. – User9527

Powiązane problemy