我试图做什么:
由父视图控制器管理的不应该旋转的父视图。
由子视图控制器管理的应该旋转到所有方向的子视图。
我尝试过的:
ParentViewController
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return .Portrait
}
override func shouldAutorotate() -> Bool {
return true
}
fun addChildViewController() {
let storyBoard = UIStoryboard(name: "Main", bundle: nil)
self.childViewController = storyBoard("Child View Controller") as? ChildViewController
self .addChildViewController(self.childViewController!)
self.childViewController! .didMoveToParentViewController(self)
self.view .addSubview(self.childViewController!.view)
self.childViewController!.view.frame = CGRectMake (40, 200, 400, 250)
}
子视图控制器
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return .All
}
override func shouldAutorotate() -> Bool {
return true
}
Xcode 部署信息中支持的方向已设置为四个。
我的问题:
没有视图旋转。如果我将父视图的旋转设置为所有方向,那么所有视图都会一起旋转。所以要么全部旋转,要么不旋转。
更新
当我尝试为 UIDeviceOrientationDidChangeNotification 添加观察器,并使用 UIDevice.currentDevice().orientation 用 CGAffaineTransformMakeRotate 旋转 childView 时,我得到了期望的结果。然而,例如,如果我旋转到横向模式,并尝试下拉通知中心(或者如果我收到系统通知),通知中心仍处于纵向模式(因为应用程序在本地仍然保持为纵向模式),则旋转的 childView 会旋转回到纵向模式,以符合状态栏/通知/通知中心的方向。
原生 iOS 相机应用 是我可以提供的最佳示例。主画布不会旋转成不同的方向,但是在幕后,状态栏会旋转以符合设备方向。此外,子视图会旋转自身以符合不同的方向。我正在尝试实现这种行为...
viewWillTransition(to:with:)
不起作用,所以你需要找到一个合适的解决方案。 - Andrej