屏幕旋转不同步时旋转 UIView
Posted
技术标签:
【中文标题】屏幕旋转不同步时旋转 UIView【英文标题】:Rotating UIViews when screen rotates out of sync 【发布时间】:2016-02-21 12:06:12 【问题描述】:当屏幕旋转时,我在让 UIViews 正确旋转时遇到问题。我正在重置 viewWillLayoutSubviews 中各种元素的框架:
override func viewWillLayoutSubviews()
super.viewWillLayoutSubviews()
//This a transparent black overlay
cutterView.frame = view.frame
scrollView.center = view.center
label.frame.origin = CGPoint(x: cutterView.frame.size.width/2 - label.frame.size.width/2, y: 10)
okButton.frame.origin = CGPoint(x: cutterView.frame.size.width - okButton.frame.size.width - 12, y: 5)
backButton.frame.origin = CGPoint(x: 10, y: -7)
UIScrollView 的 clipToBounds 设置为 false。当面向横向时,我的内容比屏幕高。我有一个覆盖整个视图的黑色透明 UIView (cutterView)。然而,旋转是有效的,因为 UIScrollView 的内容非常高,它的顶部和底部不会被覆盖层覆盖,直到覆盖层赶上并旋转以覆盖整个视图。有什么解决方法可以解决这个问题吗?我可以稍微延迟滚动视图的旋转吗?任何指针将不胜感激。谢谢!
【问题讨论】:
viewWillLayoutSubviews
不是协调动画与旋转的正确位置。
最好的地方在哪里?是否可以为 UIDeviceOrientationDidChangeNotification 注册通知并在那里进行?
实现 viewWillTransitionToSize:withTransitionCoordinator:
并使用转换协调器。这就是它的用途,因此您可以协调过渡。
@matt 谢谢队友。只是调查了一下,让它工作了。
酷!我会把我的 cmets 变成一个答案,这样我们就可以完成这个故事。
【参考方案1】:
问题在于viewWillLayoutSubviews
不是协调动画与旋转的正确位置。相反,实现viewWillTransitionToSize:withTransitionCoordinator:
并使用它为您提供的转换协调器。这就是它的用途,因此您可以协调您的动画与 transition。
【讨论】:
以上是关于屏幕旋转不同步时旋转 UIView的主要内容,如果未能解决你的问题,请参考以下文章