界面方向改变时调整图层大小?

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 但没有效果

以上是关于界面方向改变时调整图层大小?的主要内容,如果未能解决你的问题,请参考以下文章

arcgis10点的颜色和大小如何改变,

iPad - 带有 UITextField 的 UITableView - 方向改变时自动调整大小问题

PS如何修改图层的图像大小?

旋转和调整图像大小 + iPhone

PS处理图片选择区域调亮后,会在区域边(虚线框)的位置留下白色的边框。怎么处理掉?请各位大神帮忙。

以编程方式创建的 UILabel 未在旋转时调整大小