gpt4 book ai didi

xcode - Swift 中的延迟操作

转载 作者:IT王子 更新时间:2023-10-29 05:04:37 27 4
gpt4 key购买 nike

我想让一个事件指示器开始动画,然后在一秒钟后停止。

那么有人知道我该怎么做吗?

class stuff {
@IBOutlet weak var indicator: UIActivityIndicatorView!

func iGotTriggeredBySomething {
indicator.startAimating()
//delay?
indicator.stopAnimating()
}
}

感谢您的回答。

最佳答案

dispatch_after() 是延迟操作的标准方法。

indicator.startAnimating()

let delay = 4.5 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue()) {
indicator.stopAnimating()
}

参见:dispatch_after - GCD in swift?


Swift 3.0 更新

indicator.startAnimating()

let delay = Int(4.5 * Double(1000))
DispatchQueue.main.after(when: .now() + .milliseconds(delay)) {
indicator.stopAnimating()
}

但是,本着 Swift 3.0 的精神,我认为扩展 DispatchQueue 会是更好的解决方案。

extension DispatchQueue {
func delay(_ timeInterval: TimeInterval, execute work: () -> Void) {
let milliseconds = Int(timeInterval * Double(1000))
after(when: .now() + .milliseconds(milliseconds), execute: work)
}
}

这给我们留下了一个非常好的

indicator.startAnimating()

DispatchQueue.main.delay(4.5) {
indicator.stopAnimating()
}

更新 2

深入研究 Xcode 8.0 beta,我发现了 public func +(time: DispatchTime, seconds: Double) -> DispatchTime。所以,我想这是有效的……

indicator.startAnimating()

DispatchQueue.main.after(when: .now() + 4.5) {
indicator.stopAnimating()
}

我认为没有必要为已经如此干净的东西扩展 DispatchQueue

--

Swift 3.1 更新

Swift 3.1 有新语法。他们只是喜欢改变事物,不是吗。

indicator.startAnimating()

DispatchQueue.main.asyncAfter(deadline: .now() + 4.5) {
indicator.stopAnimating()
}

关于xcode - Swift 中的延迟操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27085009/

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