摇晃一段时间?

Posted

技术标签:

【中文标题】摇晃一段时间?【英文标题】:Shake for a certain period of time? 【发布时间】:2015-12-13 08:42:22 【问题描述】:

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

顺便说一句,我只懂swift代码。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

你可以这样做

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()

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

【讨论】:

如果用户在该时间段内停止摇晃,这不会停止计时器 @RudolfJ,你是对的。使用motionEnded 函数更新了答案。

以上是关于摇晃一段时间?的主要内容,如果未能解决你的问题,请参考以下文章

UIAccelerometer 在摇晃

iOS 5 检测重复/连续摇晃

比特币矿机重镇华强北地标性建筑赛格大厦发生摇晃!专家分析:目前来看是共振现象

UIPopover 防止摇晃撤消

摇晃不工作超过一定的价值

如何防止特定视图响应摇晃手势?