2016-07-16 72 views
0

我正在使用NSTimer来让用户知道该应用程序正在工作。进度条设置为持续3秒,但在运行时,它会以“滴答”的动作显示,并且不像应该那样平滑。无论如何,我可以让它更平滑 - 我相信我只是一个计算错误。UIProgressView无法按预期与NSTimer一起工作 - Swift

下面是代码:

import UIKit 

class LoadingScreen: UIViewController { 

    var time : Float = 0.0 
    var timer: NSTimer? 

    @IBOutlet weak var progressView: UIProgressView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do stuff 

     timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector:Selector("setProgress"), userInfo: nil, repeats: true) 

    } //close viewDidLoad 

    func setProgress() { 
     time += 0.1 
     progressView.progress = time/3 
     if time >= 3 { 
      timer!.invalidate() 
     } 
    } 
} 

回答

0

按照苹果iOS SDK文档,你可以通过使用下一个API的实现它:

func setProgress(_ progress: Float, animated animated: Bool) 

它调整由接收器显示的当前进度,可选择对变化进行动画处理。

参数:
progress - 新的进度值。

animated - true如果更改应该动画,false如果更改应该立即发生。在此

更多信息:
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIProgressView_Class/index.html#//apple_ref/occ/instm/UIProgressView/setProgress:animated

所以你的情况,你应该做这样的:

func setProgress() { 
    time += 0.1 

    dispatch_async(dispatch_get_main_queue()) { 
     progressView.setProgress(time/3, animated: true) 
    } 

    if time >= 3 { 
     timer!.invalidate() 
    } 
} 

同时请注意,这是执行上的主UI更新一个很好的做法线程,所以我只是在主队列上派发进度更新。
希望它能帮助你。

+0

感谢您的回复 我想你没有正确地得到我的问题。我的进度也很好,动画也是 –