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

Ios 在Swift中触摸屏幕时取消的异步任务,ios,swift,asynchronous,Ios,Swift,Asynchronous,我正在开发一个应用程序,每个页面上有5个动画。单击每个动画时都会启动它们。如果未按下任何图像,为了在5秒钟内帮助用户,将释放aid。这对每个动画都是重复的,如果单击动画1,当动画结束时,计数器将返回5秒,但在任何动画中按下这5秒时,计数器应取消。我怎么办?直到现在,dispatch_after还没有取消,但没有如何取消。如果您希望您的操作可以取消,一个简单的方法是使用NSBlockOperation let operation = NSBlockOperation() operation.add

我正在开发一个应用程序,每个页面上有5个动画。单击每个动画时都会启动它们。如果未按下任何图像,为了在5秒钟内帮助用户,将释放aid。这对每个动画都是重复的,如果单击动画1,当动画结束时,计数器将返回5秒,但在任何动画中按下这5秒时,计数器应取消。我怎么办?直到现在,dispatch_after还没有取消,但没有如何取消。如果您希望您的操作可以取消,一个简单的方法是使用
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.start()
operation.cancel()
如果您的操作有多个阶段,您应该定期检查
操作。已取消
-调用
取消()
本身除了将其设置为
之外,什么都不做


对于更复杂的工作,您可以将多个操作链接在一个依赖项中,并在调用operation.Cancel()时将它们放入
NSOperationQueue

中。它会停止还是继续执行If语句?在我的应用程序中,当最后一个start调用not check if语句时,我可以调用NSBlockQueue start。如果我有一个持续3秒的动画,在此动画之前,操作正在运行,在动画之后,操作再次开始…好的,我测试但不工作。问题是:当启动视图时,我以5秒的延迟调用OPERATION.start()启动操作。当我在这5秒内点击动画时,我调用cancel操作,当动画结束时,我调用另一次start()方法。这会使Cancel不为true,并且该操作在5秒之前执行…不要在取消操作后调用
start()
。做一个新的手术。