我正在开发一个在每页上有5个动画的应用程序。单击它们时会启动每个动画。如果没有按任何图像,在5秒内协助用户,援助被释放。对于每个动画重复此操作,如果单击动画1,当动画结束时,它会将计数器返回5秒,但在任何动画中按下这5秒钟时,计数器应该被取消。我可以管理吗?到目前为止一直使用dispatch_after而不是如何取消
答案 0 :(得分:5)
如果您希望取消操作,一种简单的方法是使用NSBlockOperation
。
let operation = NSBlockOperation()
operation.addExecutionBlock { () -> Void in
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(5 * NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue(), { () -> Void in
if operation.cancelled {
return
} else {
// perform your animation
}
})
}
开始操作:
operation.start()
如果您想取消操作:
operation.cancel()
如果您的操作有多个阶段,则应定期检查operation.cancelled
- 调用cancel()
除了设置为true
之外不执行任何操作。
对于更复杂的工作,您可以在依赖项中将多个操作链接在一起,并将它们放在NSOperationQueue
中。