swift - 停止 dispatch_after

标签 swift animation dispatch

我使用动画来指定提示,以帮助延迟交互:

 let delay = 1.8 * Double(NSEC_PER_SEC)
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time, dispatch_get_main_queue()) {
        //call the method which have the steps after delay.

        self.rain.alpha = 0

        UIView.animateWithDuration(5, animations: {

            self.rain.alpha = 1

        })

        self.tip.startAnimating()

    }

但是,如果在动画开始之前,用户触摸了屏幕,我需要停止这个延迟过程。

最佳答案

iOS 8 和 OS X Yosemite 引入了 dispatch_block_cancel 允许您在它们开始执行之前取消它们

你在类中声明一个变量如下:

var block: dispatch_block_t?

初始化block变量并在dispatch_after中提供:

block = dispatch_block_create(DISPATCH_BLOCK_INHERIT_QOS_CLASS) {
  print("I executed")
}
let time: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(5 * NSEC_PER_SEC))
dispatch_after(time, dispatch_get_main_queue(), block!)

之后您可以按如下方式取消它:

dispatch_block_cancel(block!)

关于swift - 停止 dispatch_after,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356263/

相关文章:

Javascript方法调度过程

json - 在 swift 中从 JSON 填充 tableview 时的约定是什么?

swift - 更改桌面 View 的按钮图像

javascript - 随着时间的推移平滑滚动动画距离

css - 你如何在显示 :none and display:block? 之间转换

objective-c - Objective C 到 Swift 的调度过程

laravel-5 - 有什么方法可以在laravel 5中发送闭包?

ios - 在 SwiftUI 中切换 View 后 Firebase 图像为空

ios - Swift:在嵌套字典中发布访问键

javascript - 如何使 React Native Animated.View 可点击?