【发布时间】:2016-11-17 18:48:48
【问题描述】:
这个问题完全是关于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 中使用)来打开和关闭动画。
但是问题很多
这在 AppWide 中不起作用,一团糟,它是基于场景的
关闭所有动画似乎非常糟糕
你可以看到各种各样的赛道
这个问题完全是关于iOS9+的
这些天来,有没有更好的方法可以在支持横向/纵向的应用中关闭旋转动画???
这个问题完全是关于iOS9+的
【问题讨论】:
-
这适用于哪个版本的 iOS?
-
嗨@LukeVanIn 谢谢,当然是iOS9。注意第一句话!
-
在模拟器上工作,但不能在真实设备(ipad)上工作。
UIView.areAnimationsEnabled()在动画块内返回true,这让我很困惑(因为它之前确实被禁用了)。旋转动画块一定有时间问题...(setAnimationsEnableddoc 状态:“此方法仅影响调用后提交的那些动画。如果在现有动画运行时调用此方法,这些动画会继续运行,直到它们到达自然终点。")
标签: ios swift ios9 ios-autolayout autorotate