这个问题严格来说是关于iOS9+的
假设您有一个普通的现代应用程序(自动布局、故事板、通用),它允许所有四个旋转位置
您希望它以正常方式自动旋转,因此当用户将设备从横向旋转为纵向时,它将更改为新的基于约束的布局
但您只是希望在用户旋转设备期间没有动画。您希望它只需“单击”即可到达新的横向或直立布局。
我能够实现这一目标的唯一方法是添加:
override func viewWillTransitionToSize(size:CGSize,
withTransitionCoordinator coordinator:UIViewControllerTransitionCoordinator)
{
coordinator.animateAlongsideTransition(nil, completion:
{_ in
UIView.setAnimationsEnabled(true)
})
UIView.setAnimationsEnabled(false)
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator);
}
to one视图控制器,一个最高或接近最高的 VC,它保存容器视图的其余部分或场景中的任何内容。
这基本上与使用古老的想法相同
willRotateToInterfaceOrientation/didRotateFromInterfaceOrientation(两者现在在现代 iOS 中均不可用)来打开或关闭动画。
但也存在很多问题
这个问题严格来说是关于iOS9+的
如今,有没有更好的方法来关闭支持横向/纵向的应用程序中的旋转动画???
这个问题严格来说是关于iOS9+的
据我所知,没有更好的办法。
尽管您可以使用此方法声明一个单独的类,并使应用程序中的所有视图控制器成为其子类。
class NoRotateAnimationVC: UIViewController {
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
UIView.setAnimationsEnabled(false)
coordinator.notifyWhenInteractionEndsUsingBlock {_ in UIView.setAnimationsEnabled(true)}
}
}
当您旋转设备时,所有视图需要更改其大小的视图控制器都会收到viewWillTransitionToSize
方法调用。
您需要在应用程序中声明一次这个新类,然后更改类中的所有视图控制器声明MyViewController: UIViewController
to MyViewController: NoRotateAnimationVC
.
提供的实现禁用所有动画并在转换后重新启用它们。因此,如果您仅在一个视图控制器中重写此方法,只要其视图会因旋转而改变大小,它将在各处禁用旋转动画。但如果该视图控制器未激活,动画将不会被禁用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)