摇晃一定时间?

Shake for a certain period of time?

我想使用摇动功能来关闭闹钟,这会导致用户摇动 phone 30 秒。有没有办法测试用户摇动设备的时间以及如何设置摇动功能?

顺便看懂了swift代码

我不确定您是否可以附加一个计时器来摇动手势,但也许您可以设置一个计数器来观察它被触发了多少次?

要捕捉摇动手势,只需将此方法添加到您的视图控制器:

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

你可以这样做

var timer = Timer()

override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if motion == .motionShake {
        print("Device shaken, shake timer started")
        timer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(turnOffAlarm), userInfo: nil, repeats: true)
    }
}

override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if motion == .motionShake {
        print("Device shake stop, shake timer stopeed")
        timer.invalidate()
    }
}

@objc func turnOffAlarm() {
    print("Alarm off")
    timer.invalidate()
}

当用户开始摇动 phone 时,您会以 30 秒的间隔启动计时器,如果用户停止摇动,您将调用 invalidate,否则在 30 秒后您将调用 turnOffAlarm 并使计时器失效。