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

Согласно Apple, 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() 
    } 
} 

Также обратите внимание, что это хорошая практика для выполнения обновления пользовательского интерфейса на основном thread, поэтому я просто отправил обновление прогресса в основной очереди.
Надеюсь, это вам поможет.

+0

Спасибо за ваш ответ Я думаю, что у меня не было вопроса правильно. Мой прогресс работает отлично и оживленно –