ios - 如果在执行延迟时间之前单击触发延迟操作的同一按钮,我该如何取消延迟操作?

标签 ios swift

class viewcontroller1: UIViewController {

我有这两张图片。单击下一步按钮时,image1 会在 10 秒后变为 image2。但是,如果在 10 秒到期之前再次单击下一个按钮,我不知道如何取消/重置延迟操作。这是我到目前为止的代码......

var image1: UIImageView!
var image2: UIImageView!

func delay(_ delay:Double, closure:@escaping ()->()) {
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}

@IBAction func nextbutton(_ sender: Any) {

image1.image = UIImage(named: "image1")
delay(10) { self.image2.image = UIImage(named: "image2")
}
}
}    

如果有任何帮助,我将不胜感激。谢谢

最佳答案

anyncAfter不可取消

根据评论,您必须使用 Timer 以下是示例

创建全局变量

var timer:Timer?

和行动

@IBAction func btnImageChangedTapped(_ sender: UIButton) {
    if (self.timer != nil) {
        self.timer?.invalidate()
        self.timer = nil;
    }
    timer = Timer.scheduledTimer(timeInterval: yourTime, target: self, selector: #selector(changeImage:), userInfo: sender, repeats: false)
}

关于ios - 如果在执行延迟时间之前单击触发延迟操作的同一按钮,我该如何取消延迟操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45874516/

相关文章:

ios - Swift Firebase 在设置时获取 childByAutoId 键

ios - 在 objective-c 中的线程之间传递消息

ios - contentOfFile 加载后删除文件

ios - Swift UITableView 多行单元格

swift - Swift 中没有 default(T) 吗?

swift - Xcode/Swift |将 TopBorder 添加到 TabBar

ios - 类型 string 不符合 coredata 的协议(protocol)序列类型

ios - 在 iOS 中创建六边形 ImageView 形状

swift - SwiftUI "body"变量是什么类型?

ios - 从表中删除引用对象 - Swift