2016-07-16 74 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

感謝您的回覆 我想你沒有正確地得到我的問題。我的進度也很好,動畫也是 –