gpt4 book ai didi

ios - 从 Timer 选择器函数 Swift 调用函数的完成处理程序

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:15 25 4
gpt4 key购买 nike

我有 animateButtons() 函数,我只需要在动画结束时设置完成处理程序。问题是,在 animateButtons() 中,我只能在 imageView.startAnimating() 之后设置完成处理程序,因此整个时间会受到影响,因为它的完成用于启动其他动画。我在另一篇有同样问题的帖子中读到,我应该设置一个 NSTimer 来设置完成处理程序,正如我实际想做的那样,但我真的不知道该怎么做。我已将 NSTimer 设置为调用 setCompletion() 函数,但如何将其设置为调用 animateButtons() 完成处理程序?

你能给我指出正确的方向吗?

这是函数和选择器函数:

static func animateButtons(completed: @escaping(Bool) ->(), imageView: UIImageView, images: [UIImage]) {
imageView.animationImages = images
imageView.animationDuration = 1.0 // check duration
imageView.animationRepeatCount = 1
imageView.startAnimating()

_ = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(setCompletion), userInfo: nil, repeats: false)
// completed(true)
}

@objc func setCompletion() {

}

最佳答案

你可以尝试使用内联回调

static func animateButtons(completed: @escaping(Bool) ->(), imageView: UIImageView, images: [UIImage]) {
imageView.animationImages = images
imageView.animationDuration = 1.0 // check duration
imageView.animationRepeatCount = 1
imageView.startAnimating()
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false, block: { (t) in
t.invalidate()
completed(true)
})
}

顺便说一句,也可以完成这项工作后 dispatch

static func animateButtons(completed: @escaping(Bool) ->(), imageView: UIImageView, images: [UIImage]) {
imageView.animationImages = images
imageView.animationDuration = 1.0 // check duration
imageView.animationRepeatCount = 1
imageView.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
completed(true)
}
}

关于ios - 从 Timer 选择器函数 Swift 调用函数的完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com