#swift #uiprogressview
#swift #uiprogressview
Вопрос:
Я новичок в Swift, и у меня проблемы с progressView. Я запускаю свою временную шкалу progressView с
self.timeBar.setProgress(10.0, animated: true)
Затем я пытаюсь получить значение TimeBar в течение 10 секунд (между 0.0 и 1.0) :
print(timeBar.progress)
Но я получаю 1.0 или 0.0 в любом месте, где временная шкала находится вдоль progressView. Я получаю 0.0 перед запуском и 1.0 где-либо еще.
Как тогда отслеживать прогресс? Спасибо 😉
Комментарии:
1. Вы обновляете свой индикатор выполнения в основном потоке, отправляя его в основной?
2. Спасибо за ответ. Честно говоря, я не знаю… Я слишком новичок, чтобы знать, в каком потоке это! Может быть, есть способ узнать это? Еще раз спасибо.
3. Хорошо, если вы не уверены, что такое GCD (Grand Central Dispatch), тогда нам понадобится больше контекста. Что вы используете для обновления своего прогресса? Таймер, загрузка, загрузка или что-то еще? В зависимости от того, что обновляется, этот индикатор выполнения будет определять наш ответ.
4. На самом деле я просто проверил это, используя self.TimeBar.setProgress(10.0, анимированный: true). Нет таймера, нет загрузки или выгрузки. Панель отображается анимированной в течение 10 секунд без проблем. Но значение, которое я получаю из свойства progress, всегда равно 1.0.
Ответ №1:
Хорошо, в interface builder вы можете установить минимальное и максимальное значение для вашего индикатора выполнения. По умолчанию значение с плавающей запятой равно от 0.0 до 1.0. Вы захотите изменить это значение на 0.0 как минимум до 10.0 как максимум. Тогда я немного объясню это. Этот метод .setProgress()
просто устанавливает его и анимирует. Невозможно получить текущее значение из этого индикатора выполнения, потому что значение устанавливается немедленно, затем запускается анимация, анимация не изменяет значение прогресса с течением времени. Прогресс сначала равен 0, затем он устанавливается на 1, затем анимируется, как если бы было установлено значение.
Правильный способ справиться с этим, чтобы вы могли получить значение, — это использовать таймер, загрузку, выгрузку или какой-либо другой метод, который указывает на истинный «прогресс». Например, прогресс от 1 секунды до 10 секунд, при этом каждая секунда составляет 0,1 от 10 или 10%. Вот простой пример. Другим примером может быть щелчок UIButton, который увеличивает значение прогресса на 1.0.
var timer = Timer()
func updateProgress() {
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerUpdate), userInfo: nil, repeats: false)
}
@objc func timerAction(){
if timeBar.progress >= 10.0 {
timer.invalidate()
return
}
timeBar.setProgress(timebar.progress 1.0, animated: true)
}
Комментарии:
1. Большое вам спасибо! Я думал, что есть способ получить значение! Странно, что это невозможно сделать! Тогда я воспользуюсь вашим способом 🙂 Еще раз спасибо!