如何在Swift的AppDelegate(整个应用)中检测设备抖动?我已经找到了描述如何在视图控制器中执行此操作的答案,但希望在整个应用程序中执行此操作。
f0brbegy1#
如果要全局检测摇动,UIWindow实现了可以接收摇动事件的UIResponder。可以将以下代码段添加到AppDelegate
extension UIWindow { open override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) { if motion == .motionShake { print("Device shaken") } } }
r7xajy2e2#
在AppDelegate中添加以下代码段:
AppDelegate
override func motionBegan(motion: UIEvent.EventSubtype, withEvent event: UIEvent?) { if motion == .MotionShake { print("Device shaken") } }
Swift 3.0版本:
override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) { if motion == .motionShake { print("Device shaken") } }
uemypmqf3#
从Swift 4或5开始,它是UIEvent.EventSubtype,而不是UIEventSubtype。另外,不要忘记添加对super.motionEnded(motion, with: event)的调用,这会保留视图控制器上的所有motionEnded定制。
UIEvent.EventSubtype
UIEventSubtype
super.motionEnded(motion, with: event)
extension UIWindow { open override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) { super.motionEnded(motion, with: event) if motion == .motionShake { print("Device shaken") } } }
3条答案
按热度按时间f0brbegy1#
如果要全局检测摇动,UIWindow实现了可以接收摇动事件的UIResponder。可以将以下代码段添加到AppDelegate
r7xajy2e2#
在
AppDelegate
中添加以下代码段:Swift 3.0版本:
对于以后的版本,这似乎不再起作用。您需要在视图控制器中添加上述代码
uemypmqf3#
从Swift 4或5开始,它是
UIEvent.EventSubtype
,而不是UIEventSubtype
。另外,不要忘记添加对
super.motionEnded(motion, with: event)
的调用,这会保留视图控制器上的所有motionEnded定制。