swift 检测AppDelegate中的抖动

pn9klfpd  于 2023-02-28  发布在  Swift
关注(0)|答案(3)|浏览(170)

如何在Swift的AppDelegate(整个应用)中检测设备抖动?
我已经找到了描述如何在视图控制器中执行此操作的答案,但希望在整个应用程序中执行此操作。

f0brbegy

f0brbegy1#

如果要全局检测摇动,UIWindow实现了可以接收摇动事件的UIResponder。可以将以下代码段添加到AppDelegate

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

r7xajy2e2#

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")
    }
}

对于以后的版本,这似乎不再起作用。您需要在视图控制器中添加上述代码

uemypmqf

uemypmqf3#

从Swift 4或5开始,它是UIEvent.EventSubtype,而不是UIEventSubtype
另外,不要忘记添加对super.motionEnded(motion, with: event)的调用,这会保留视图控制器上的所有motionEnded定制。

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

相关问题