我试图在弹出过渡期间为导航栏的backgroundImage设置动画。
我意识到backgroundImage不是一个可动画的属性,但我已经能够在推送过程中通过在视图控制器的viewWillAppear方法中使用CATransition来实现这一点,我在这之间转换:
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)
}
我预计这会在流行音乐期间起作用,但相反的是导航栏会在弹出动画完成后突然显示下一个视图控制器(非动画)的背景图像。
我还尝试将上述尝试与转换协调器结合使用,但是在弹出完成后图像突然发生变化时会产生完全相同的结果。
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的方法。