xcode – Swift中的延迟动作

我想让活动指标开始动画,然后在一秒钟后停止。

有没有人知道我该怎么做?

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测试版,我发现公共功能(时间:DispatchTime,秒:双) – > 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()
}

相关文章

在有效期内的苹果开发者账号(类型为个人或者公司账号)。还...
Appuploader官网--IOS ipa上传发布工具,证书制作工具跨平台...
苹果在9月13号凌晨(北京时间)发布 iOS 16,该系统的设备可...
计算机图形学--OpenGL递归实现光线追踪
Xcode 14打出来的包在低版本系统运行时会崩溃,报错信息是Li...