Анимированная UILabel исчезает при возвращении из фона - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть UILabel, который постоянно появляется и исчезает, но когда приложение возвращается из фона, текст исчезает.

Я попробовал следующее, но это не сработало,

override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(fadeText), name: UIApplication.willEnterForegroundNotification, object: nil)
}
    func fadeInThenOut(label : UILabel, delay: TimeInterval) {

         UILabel.animate(withDuration: 2.0, delay: delay, options: [UILabel.AnimationOptions.autoreverse, UILabel.AnimationOptions.repeat], animations: {
            view.alpha = 0
        }, completion: nil)

    }

@objc func fadeText() {
        fadeInThenOut(label: textLabel, delay: 0)
    }

 override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        fadeText()

    }

1 Ответ

3 голосов
/ 30 сентября 2019

Изменить willEnterForegroundNotification на didBecomeActiveNotification следующим образом:

NotificationCenter.default.addObserver(self, selector: #selector(fadeText), name: UIApplication.didBecomeActiveNotification, object: nil)

Тогда у вашего селектора должно быть начальное альфа-значение для self.view:

  @objc func fadeText() {
        self.view.alpha = 1
        fadeInThenOut(label: label, delay: 0)
    }

Теперь вам не нужен этот код в ViewDidAppear.

Весь ваш код должен выглядеть следующим образом:

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(fadeText), name: UIApplication.didBecomeActiveNotification, object: nil)
}

func fadeInThenOut(label : UILabel, delay: TimeInterval) {
    UILabel.animate(withDuration: 2.0, delay: delay, options: [UILabel.AnimationOptions.autoreverse, UILabel.AnimationOptions.repeat], animations: {
        self.view.alpha = 0
    }, completion: { (finished: Bool) in
        print("done")
    })

}

@objc func fadeText() {
    self.view.alpha = 1
    fadeInThenOut(label: textLabel, delay: 0)
}

Обновлено: приведенный выше код анимирует self.view, а не textLabel. Если вы хотите анимировать только ярлык, измените self.view.alpha на self.textLabel.alpha внутри fadeInThenOut() и fadeText()

...