界面方向改变时调整图层大小?
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")
}
这会告诉您设备是否会在它发生之前旋转。您可以在此处 运行 您的代码。
我正在开发一些支持纵向模式和横向模式的简单应用程序。我有一个视图 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")
}
这会告诉您设备是否会在它发生之前旋转。您可以在此处 运行 您的代码。