UIView.animate () зависает, когда просыпается представление - PullRequest
1 голос
/ 02 ноября 2019

Я бесконечно зацикливаю анимацию UIView со следующим

UIView.animate(withDuration: 1.0, delay: 0, options: [.autoreverse, .repeat], animations: {
        self.someLabel.alpha = 0.3
    }, completion: nil)

Это работает нормально, но когда viewController просыпается, анимация останавливается там, где она есть.

Запуск того же кода, что и выше в viewDidWakeUp(), не исправляет это.

Как сделать так, чтобы анимация не зависала или продолжала с того места, где она остановилась, когда проснулся viewController.

Чтобы уточнить, под "пробуждением" я подразумеваю одно из следующего:

  • Закрытие приложения и его повторное открытие с активным этим viewController,
  • Спящий режимтелефон, а затем разбудить его с этим viewController все еще активен

1 Ответ

1 голос
/ 02 ноября 2019

Добавьте два уведомления willEnterForegroundNotification и didEnterBackgroundNotification.

Также стоит отметить. Это в некоторых случаях, вам нужно сбросить анимированное свойство, чтобы новая анимация прикрепилась. Я могу подтвердить это с помощью анимированного преобразования.

Просто звоню ...

 view.layer.removeAllAnimations()
 self.someLabel.alpha = 1.0

// Полный код

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view, typically from a nib.

    NotificationCenter.default.addObserver(self, selector:#selector(didEnterForeground) , name: UIApplication.willEnterForegroundNotification, object: nil)

    NotificationCenter.default.addObserver(self, selector:#selector(didEnterBackground) , name: UIApplication.didEnterBackgroundNotification, object: nil)

}

@objc  func didEnterBackground() {
    view.layer.removeAllAnimations()
    self.someLabel.alpha = 1.0
}


@objc func didEnterForeground()  {

    DispatchQueue.main.async {
        self.animation()
    }

}
func animation() {

    UIView.animate(withDuration: 1.0, delay: 0, options: [.autoreverse, .repeat], animations: {
        self.someLabel.alpha = 0.3
    }, completion: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...