我想让活动指示器开始动画,然后在一秒后停止.
那么有谁知道我怎么能这样做?
class stuff {
@IBOutlet weak var indicator: UIActivityIndicatorView!
func iGotTriggeredBySomething {
indicator.startAimating()
//delay?
indicator.stopAnimating()
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢回答.
Jef*_*mas 80
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()
}
Run Code Online (Sandbox Code Playgroud)
请参阅:dispatch_after - swift中的GCD?
Swift 3.0的更新
indicator.startAnimating()
let delay = Int(4.5 * Double(1000))
DispatchQueue.main.after(when: .now() + .milliseconds(delay)) {
indicator.stopAnimating()
}
Run Code Online (Sandbox Code Playgroud)
但是,根据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)
}
}
Run Code Online (Sandbox Code Playgroud)
这让我们非常好
indicator.startAnimating()
DispatchQueue.main.delay(4.5) {
indicator.stopAnimating()
}
Run Code Online (Sandbox Code Playgroud)
更新2
我发现,深入研究Xcode 8.0测试版public func +(time: DispatchTime, seconds: Double) -> DispatchTime.所以,我想这是有效的......
indicator.startAnimating()
DispatchQueue.main.after(when: .now() + 4.5) {
indicator.stopAnimating()
}
Run Code Online (Sandbox Code Playgroud)
我不认为有必要扩展DispatchQueue这个干净的东西.
-
Swift 3.1的更新
Swift 3.1有新的语法.他们只是喜欢换东西而不是他们.
indicator.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + 4.5) {
indicator.stopAnimating()
}
Run Code Online (Sandbox Code Playgroud)
小智 10
随着更新的Swift 3语法,这变成了
DispatchQueue.main.asyncAfter(deadline: .now() + 4.5) {
indicator.stopAnimating()
}
Run Code Online (Sandbox Code Playgroud)
以下是使用Swift 3.1和Grand Central Dispatch 执行此操作的更清晰,更具表现力的代码:
Swift 3.1:
indicator.startAnimating()
// Runs after 1 second on the main queue.
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1) ) {
indicator.stopAnimating()
}
Run Code Online (Sandbox Code Playgroud)
此外.seconds(Int),.microseconds(Int)和.nanoseconds(Int)可用于时间.
| 归档时间: |
|
| 查看次数: |
38792 次 |
| 最近记录: |