我正在處理一個ios swift
應用程序,我正在介紹處理我的應用程序中的抖動手勢。除了一個面板之外,我想處理應用程序周圍的晃動。在這個特定的面板上,我想調用一個完全不同的功能。所以,首先我寫了一個擴展的UIViewController,這樣搖晃手勢支持其他任何地方:爲什麼我不能在另一個UIViewController中重寫UIViewController的擴展方法?
extension UIViewController:MotionDelegate {
override public func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
if motion == .MotionShake {
print("I'm in extension")
self.showAlertMessage("", message: "I'm in extension") //this invokes an alert message
}
}
}
,然後,我要處理不同的看法我寫的面板:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
if motion == .MotionShake {
showAlertMsg("Yes!", message: "This is some random msg")
}
}
現在的問題如下所示:
當我在屏幕上搖動手機時,我想表現出不同的行爲 - 我看到警報消息012g。但是當這個屏幕出現在屏幕上(它會持續幾秒鐘),然後我再次搖動手機 - 突然顯示彈出框I'm in extension
。我想避免顯示第二個彈出窗口。問題是,當第一條消息出現彈出窗口時,它不會識別出我的優先方法。在其他情況下(當沒有彈出窗口時)一切正常。這是我的showAlertMsg
功能:
func showAlertMsg(title: String, message: String, delay: Double){
let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
self.presentViewController(alertController, animated: true, completion: nil)
let delay = delay * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
alertController.dismissViewControllerAnimated(true, completion: nil)
})
}
有什麼我可以做,以避免顯示從擴展彈出,同時從主控制器顯示彈出?