Как анимировать фоновое изображение UINavigationBar во время pop

#ios #uinavigationcontroller #uinavigationbar #swift3

#iOS #uinavigationcontroller #uinavigationbar #swift3

Вопрос:

Я пытаюсь анимировать фоновое изображение панели навигации во время всплывающего перехода.

Я понимаю, что фоновое изображение не является анимируемым свойством, но я смог добиться этого во время нажатия, используя переход в методе viewWillAppear контроллеров представления, между которыми я переключаюсь:

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

    let animation = CATransition()
    animation.duration = 0.3
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    animation.type = kCATransitionFade

    navigationController?.navigationBar.layer.add(animation, forKey: nil)
    navigationController?.navigationBar.setBackgroundImage(navigationBarBackgroundImage, for: .default)
}
  

Я ожидал, что это сработает и во время pop, но вместо этого на панели навигации внезапно отображается фоновое изображение для следующего контроллера представления (не анимированное) ПОСЛЕ завершения pop-анимации.

Я также попытался объединить вышеупомянутую попытку с координатором перехода, но это дает точно такие же результаты, когда изображение внезапно меняется после завершения pop.

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

    transitionCoordinator?.animate(alongsideTransition: { [weak self] (context) in
    let animation = CATransition()
    animation.duration = 0.3
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    animation.type = kCATransitionFade

    self?.navigationController?.navigationBar.layer.add(animation, forKey: nil)
    self?.navigationController?.navigationBar.setBackgroundImage(navigationBarImage, for: .default)
    }, completion: nil)
}
  

В частности, я ищу способ сделать это, который работает на iOS9 и iOS10.