#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.