在Swift中触摸屏幕时取消的异步任务

时间:2015-03-10 22:44:03

标签: ios swift asynchronous

我正在开发一个在每页上有5个动画的应用程序。单击它们时会启动每个动画。如果没有按任何图像,在5秒内协助用户,援助被释放。对于每个动画重复此操作,如果单击动画1,当动画结束时,它会将计数器返回5秒,但在任何动画中按下这5秒钟时,计数器应该被取消。我可以管理吗?到目前为止一直使用dispatch_after而不是如何取消

1 个答案:

答案 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中。