Я пытаюсь сделать прогресс бар выступать в качестве таймера и обратный отсчет от 15 секунд, вот мой код:UIProgressView не будет обновлять прогресс при обновлении от отправки
private var timer: dispatch_source_t!
private var timeRemaining: Double = 15
override public func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
profilePicture.layer.cornerRadius = profilePicture.bounds.width/2
let queue = dispatch_queue_create("buzz.qualify.client.timer", nil)
timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue)
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 10 * NSEC_PER_MSEC, 5 * NSEC_PER_MSEC)
dispatch_source_set_event_handler(timer) {
self.timeRemaining -= 0.01;
self.timerBar.setProgress(Float(self.timeRemaining)/15.0, animated: true)
print(String(self.timerBar.progress))
}
dispatch_resume(timer)
}
Печать() печатает правильный результат, но индикатор прогресса никогда не обновляется, в какой-то момент он будет делать одно обновление на уровне 12-15% и просто JUMP, а затем больше ничего не делать.
Как я могу заставить эту панель неуклонно стекать вниз, а затем выполнить задачу в конце таймера без блокировки потока пользовательского интерфейса.
Спасибо за информацию о максимальной частоте обновления 60 кадров в секунду, я не знал, что устройства закрыты. Также удобно, что это уже связано с основной нитью. Принято. – Hobbyist
Я вернулся и, наконец, реализовал это, однако прогресс для бара все еще не обновляется. - Таймер выполняет логику правильно, но пользовательский интерфейс не обновляется, как должен. – Hobbyist
Я только что проверил это снова, и он отлично работает. Таким образом, если он не работает для вас, вы должны проверить несколько вещей: 1. Вы нажимаете код, начинающий цикл запуска? Вы нажимаете код внутри 'handleDisplayLink'? Добавьте выражения 'print' в обоих случаях и убедитесь, что они нажимают на код, который вы так думаете. 2. Убедитесь, что вы планируете отображение ссылки на главной рабочей точке. 3. Убедитесь, что вы не делаете ничего другого, чтобы заблокировать основной поток. Не видя полного кода, его трудно диагностировать, но это будет что-то простое. – Rob