本问题严格针对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);
}
为了一个视图控制器,找到最高或几乎最高的VC来容纳场景中余下的容器视图或其他任何东西。
这基本上是同样古老的想法,使用willRotateToInterfaceOrientation/didRotateFromInterfaceOrientation(现在在现代iOS中都无法使用)来开启/关闭动画。
然而,存在许多问题:
这不是全局的,它很混乱,是基于场景的
关闭所有动画似乎非常糟糕
你可以看到各种赛车赛道
此问题严格针对iOS9+
现在,有没有更好的方法来关闭支持横向/纵向的应用程序中的旋转动画?
此问题严格针对iOS9+
UIView.areAnimationsEnabled()
在动画块内返回true
,这让我感到困惑(因为它确实在之前被禁用了)。这一定是旋转动画块的时间问题... (setAnimationsEnabled
文档说明:“_此方法仅影响在其调用后提交的那些动画。如果您在现有动画正在运行时调用此方法,则这些动画将继续运行,直到达到其自然结束点为止._”) - lazi74