iOS 26中UINavigationController的push/pop动画不受layer.speed影响的咨询
核心结论
UINavigationController自Liquid Glass特性推出后,确实不再使用CAAnimations实现push/pop转场动画。
改用的实现方式
苹果转向了基于UIKit内部的私有动画调度系统,这套系统更贴合iOS全局动画协调机制(比如适配Liquid Glass的流畅过渡、系统级动画同步),不再依赖Core Animation的图层动画栈。它直接操作视图的布局与属性变更,相关逻辑不通过CALayer的动画接口对外暴露。
定位与控制这类动画的方案
由于新动画系统不通过CAAnimation暴露,layer.animationKeys()、layer.animation(forKey:)这类旧方法无法捕获到相关动画。若需控制或观察转场动画,可尝试以下方式:
- 实现导航控制器转场代理:通过
UINavigationControllerDelegate的navigationController(_:animationControllerFor:from:to:)方法,自定义转场动画控制器(遵循UIViewControllerAnimatedTransitioning协议)。即使系统默认动画不再依赖CAAnimation,你仍可通过自定义逻辑接管转场,实现动画速度调整、状态监听等需求。 - 监听视图布局变更:push/pop过程中,导航控制器的容器视图、导航栏等子视图会发生布局变化,可通过KVO监听视图的
frame、bounds属性,或在视图的layoutSubviews方法中追踪动画过程。 - 利用UIView动画回调:系统默认转场本质仍基于UIView动画机制,可通过
UIView.animate(withDuration:animations:completion:)的完成回调监听动画结束,或尝试用UIViewPropertyAnimator关联系统动画(不过对系统默认转场的控制能力有限)。
内容的提问来源于stack exchange,提问作者Janneman
相关产品推荐
相关产品推荐

