Перезапустите UIViewPropertyAnimator при возврате в приложение - PullRequest
1 голос
/ 30 января 2020

Я только что создал приложение iOS с простой анимацией. Но я борюсь с UIViewPropertyAnimator. Я хочу анимировать кнопку, и она работает хорошо, пока я не покину приложение (нажав кнопку «Домой») и вернусь к нему. Анимация остановилась и не запустится снова. Я попытался остановить анимацию и запустить ее снова после того, как ViewController сделалBecomeActive, но это тоже не работает.

Я запускаю анимацию в методе viewDidAppear следующим образом:

var animator: UIViewPropertyAnimator!

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

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

        //Start Animation
        animator = UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 1, delay: 0, options: [.autoreverse, .repeat], animations: {
            UIView.setAnimationRepeatAutoreverses(true)
            UIView.setAnimationRepeatCount(1000)
            self.scanButton.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
        }, completion: nil)
        animator.startAnimation()
    }

А вот код, где я останавливаю и перезапускаю анимацию:

@objc func applicationDidBecomeActive() {
        print("Active")
        animator.startAnimation()
}

@objc func applicationDidBecomeInActive() {
        print("InActive")
        animator.stopAnimation(true)
        animator.finishAnimation(at: .current)  
}

Надеюсь, вы ребята знают как это решить. Заранее спасибо.

1 Ответ

1 голос
/ 30 января 2020

Что вы можете сделать, это сделать animator свойство экземпляра, используя один из его инициализаторов:

private var animator = UIViewPropertyAnimator(duration: 1, curve: .linear, animations: nil)

Это позволит вам добавлять анимацию к нему, используя addAnimations().

animator.addAnimations {
    // add animations here
}

Когда вы останавливаете анимацию свойства аниматора, все его анимации обнуляются. Поэтому перед вызовом startAnimation() для аниматора вы должны снова дать ему анимацию (обычно ту же, что и раньше).

@objc func applicationDidBecomeActive() {
    print("Active")
    animator.addAnimations {
        // re-add animation
    }
    animator.startAnimation()
}

Вы можете добавить анимацию к самому инициализатору, но потому, что в этом примере , addAnimations() вызывается перед каждым вызовом startAnimation(), оставьте его для чистоты.

...