Я пытаюсь анимировать изменение цвета панели навигации при возврате к предыдущему контроллеру. Чтобы дать ему некоторый контекст, у меня есть контроллер A, который является контроллером collectionView и имеет непрозрачный цвет панели навигации, заданный:
self.navigationController?.navigationBar.barTintColor = UIColor.rgb(red: 244, green: 67, blue: 54)
self.navigationController?.navigationBar.tintColor = .white
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]
self.navigationController?.navigationBar.isTranslucent = false
После выбора collectionViewCell я перехожу к следующему контроллеру B, где панель навигации становится прозрачной:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
Когда пользователь нажимает на стрелку назад, я хочу, чтобы панель навигации вернулась к исходным цветам. Я попробовал простую анимацию UIView для функции viewWillDissappear
контроллера B, willMove(toParentViewController)
и функции viewWillAppear
для контроллера A:
Вот анимация:
UIView.animate(withDuration: 0.5) {
self.navigationController?.navigationBar.barTintColor = UIColor.rgb(red: 244, green: 67, blue: 54)
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.layoutIfNeeded()
}
После этого я попытался использовать координатора перехода, но получил те же результаты:
guard let coordinator = self.transitionCoordinator else {
return
}
coordinator.animate(alongsideTransition: {
[weak self] context in
self?.navigationController?.navigationBar.barTintColor = UIColor.rgb(red: 244, green: 67, blue: 54)
self?.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self?.navigationController?.navigationBar.shadowImage = nil
self?.navigationController?.navigationBar.isTranslucent = false
self?.navigationController?.navigationBar.layoutIfNeeded()
}, completion: nil)
Кажется, что независимо от того, что я пытаюсь или куда я помещаю код, я всегда получаю один и тот же результат. Я знаю, что код повторяется, но я просто пытался понять, почему, поэтому пришлось много копировать и вставлять.
Из того, что я могу сказать, я думаю, что это как-то связано с фоновым изображением предыдущего контроллера, но я в тупике, кажется, я вижу черный экран перед анимацией под панелью навигации. Любая помощь будет принята с благодарностью.
Спасибо