我在另一个堆栈溢出问题上找到了一些好的代码,但是当我单击或双击时,我的单击代码正在运行。继承人代码(顺便说一句,双击意味着我点击一次,在0.3秒内我再次点击,而不是两个手指同时点击)
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
let touch: AnyObject? = touches.anyObject()
if (touch?.tapCount == 2) {
NSObject.cancelPreviousPerformRequestsWithTarget(self)
}
}
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
let touch: AnyObject? = touches.anyObject()
if (touch?.tapCount == 1) {
let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0.3 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
println("this runs only if single tap")
})
} else if (touch?.tapCount == 2) {
println("double tap touches ended")
}
}
我认为NSObject.cancelPreviousPerformRequestsWithTarget(self)
应该停止单击块运行,但是当我双击时我的println("this runs only if single tap")
仍在运行。首先我的双击运行,然后在0.3秒之后,单击代码也会运行..对我做错的任何想法?
答案 0 :(得分:0)
问题在于
NSObject.cancelPreviousPerformRequestsWithTarget(self)
不会取消
dispatch_after(dispatchTime, dispatch_get_main_queue()
因此,这将永远不会奏效。有关此的更多详细信息,请参阅我的其他question