DyadyaEmil
@DyadyaEmil
Начинающий программист

Как продолжать «считать таймер» когда пользователь скрыл приложение или открыл что-то другое?

Приветствую!
У меня есть таймер, который каждый тик, меняет определённый параметр, отвечающий за графическое представление оставшегося времени(заполнение цветом BackGround View)
@objc func fireTimer() {
        
        
        
            self.Wave.progress += (100/(self.TimeForCook! * 100000))
            print(self.Wave.progress)
       
    
    }
    
    func StartTimer() {
        TimeForCook = 10
        Timer1 = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true)
        DispatchQueue.main.asyncAfter(deadline: .now() + TimeInterval(TimeForCook)) {
            print("It's ready")
            self.Timer1?.invalidate()
        }
       
    }

Всё отлично работает, но как только я его скрываю, изменение параметров прекращается.
DispatchQueue.main.asyncAfter(deadline: .now() + TimeInterval(TimeForCook)) {
            print("It's ready")
            self.Timer1?.invalidate()
        }

Срабатывает.
Вопрос:
Как мне отследить время, которое прошло после скрытия и возобновления работы приложения, и исходя из этого отрегулировать состояние графического отображения таймера?
Заранее благодарю откликнувшихся.
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
@402d
начинал с бейсика на УКНЦ в 1988
Если не получается, то вы не правильно решаете задачу.
Во первых, таймер должен пропищать в нужное время всегда.
Иначе пица сгорит или чайник выкипит.
Это первая задача.
Для ее решения нужно "время завершения"

Вторая задача собственно раскрасить ваш фон.
Раскраскра фона должна вызываться в onResume и там же запускаете таймер периодических вызовов.

храним два времени. Начало, конец.
Берем текущее .
interval = endTime-startTime;
cur = curTime-startTime;
procent = 100*cur/interval;

Ну и вопли "Шеф,все пропало", если первая задача не отработала.

И не надо так часто 0.001 . UI хватит и 10 раз в секунду.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
briahas
@briahas
ObjC, Swift, Python
Почитайте про BackgroundTasks.
Вкратце - (давно это делал, могу напутать в деталях) надо запускать таймер как BackgroundTasks. И, допустим, показываем нотификашку когда таймер завершился, а мы все еще в бэкграунд режиме.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы