我需要在最近更新到 iOS 16 的设备上禁用方向更改动画。
对于较旧的 iOS 版本,有一个防止动画的解决方案。使用以下方法禁用动画后,视图层次结构立即发生变化UIView:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
NSLog(@"breakpoint");
[UIView setAnimationsEnabled:NO];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
///
}
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
[UIView setAnimationsEnabled:YES];
}];
}
Run Code Online (Sandbox Code Playgroud)
更新到 iOS 16 后,动画似乎在-viewWillTransitionToSize:withTransitionCoordinator:调用之前就开始了。例如,当我在上面的代码中添加断点时,在 iOS 15(及更早版本)上,窗口在到达断点之前将保持不变。在 iOS 16 中,屏幕会在遇到断点之前旋转到新方向。
永久设置[UIView setAnimationsEnabled:NO];,在应用程序启动时会取消其他动画,但方向更改动画仍然会发生。然而,如果永久禁用动画,方向变化动画看起来会更糟,就像只有视角(旋转)有动画,但比例/方面没有动画。