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

Resizing layer when interface orientation changes?

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

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

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

它正确地调整了图层大小,但看起来不太好。首先 videoView 调整大小,然后经过一些延迟层调整大小。我希望这是一个平稳的过渡。我怎样才能做到这一点?

您是否尝试过使用 setNeedsLayout 或使用 layoutIfNeeded 强制更新视图布局?当框架结束布局子视图时,您正在更改框架,因此它将等待下一个更新周期来应用更改。

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

祝你好运, 弗朗西斯科

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

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