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

时间:2016-10-03 15:29:06

标签: ios uiview calayer nslayoutconstraint uiinterfaceorientation

我正在开发一些支持纵向模式和横向模式的简单应用。我有一个视图UIView,其约束设置(称为videoView),并在界面方向更改时正确调整大小。在该视图的顶部,我添加了自定义图层。该图层应该遵循视图的框架,因此当界面方向改变时,它也应该改变。

问题是图层没有约束。我做过类似的事情:

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    _previewLayer.frame = CGRectMake(0, 0, self.videoView.frame.size.width, self.videoView.frame.size.height);
}

它可以正确调整图层大小,但看起来并不好看。第一个视频调整大小,然后在一些延迟层调整大小后。我希望它是一个平稳的过渡。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:1)

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
if UIDevice.currentDevice().orientation.isLandscape.boolValue {
    print("Landscape")
} else {
    print("Portrait")
}

这将告诉您设备是否会在它发生之前旋转。这是您可以运行代码的地方。

答案 1 :(得分:0)

您是否尝试使用setNeedsLayout或使用layoutIfNeeded强制更新视图布局?您在结束子视图结束时正确地更改框架,以便在下一个更新周期等待应用更改。

更好的方法是在viewWillLayoutSubviews上应用框架。

祝你好运, 旧金山