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

Plu*_*Boy 4 asynchronous ios swift

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

Aar*_*ger 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
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

要开始你的操作:

operation.start()
Run Code Online (Sandbox Code Playgroud)

如果您想取消您的操作:

operation.cancel()
Run Code Online (Sandbox Code Playgroud)

如果你的操作有很多阶段,你应该定期检查operation.cancelled- cancel()除了设置之外,调用本身没有任何作用true.

对于更复杂的工作,您可以将多个操作链接在一个依赖项中并将它们放在一个NSOperationQueue.