界面方向改变时调整图层大小?
Posted
技术标签:
【中文标题】界面方向改变时调整图层大小?【英文标题】:Resizing layer when interface orientation changes? 【发布时间】:2016-10-03 15:29:06 【问题描述】:我正在开发一些支持纵向模式和横向模式的简单应用程序。我有一个视图UIView
,它设置了约束(称为videoView),并且在界面方向发生变化时会正确调整大小。在该视图之上,我添加了自定义层。该层应该跟随视图的框架,所以当界面方向改变时,它也应该改变。
问题是图层没有约束。我做过这样的事情:
- (void) viewDidLayoutSubviews
[super viewDidLayoutSubviews];
_previewLayer.frame = CGRectMake(0, 0, self.videoView.frame.size.width, self.videoView.frame.size.height);
它可以正确调整图层大小,但看起来不太好。首先 videoView 调整大小,然后经过一些延迟层调整大小。我希望这是一次平稳的过渡。我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
if UIDevice.currentDevice().orientation.isLandscape.boolValue
print("Landscape")
else
print("Portrait")
这将告诉您设备是否会在发生之前旋转。这是您可以运行代码的地方。
【讨论】:
当然可以,但是我怎么知道我应该将图层调整到哪个尺寸? 你想让你的层是屏幕大小还是什么?请提供更多信息。 图层被添加到 videoView 之上。当界面方向改变时,videoView 会调整大小。图层需要模仿那个大小,然后调整到那个大小。 您可以像以前一样更改框架。previewLayer.frame = videoView.frame
没问题,如果您还有其他问题,请告诉我。【参考方案2】:
您是否尝试过使用setNeedsLayout
或强制使用layoutIfNeeded
再次更新视图布局?当框架结束布局子视图时,您正在更改框架,因此它将等待下一个更新周期以应用更改。
更好的方法是在viewWillLayoutSubviews
上应用框架。
祝你好运, 弗朗西斯科
【讨论】:
我忘了说我也尝试了 viewWillLayoutSubviews 但没有效果以上是关于界面方向改变时调整图层大小?的主要内容,如果未能解决你的问题,请参考以下文章
iPad - 带有 UITextField 的 UITableView - 方向改变时自动调整大小问题