我所試圖做的:由母公司 - 視圖 - 控制器管理應該無法旋轉子視圖控制器旋轉,同時父視圖控制器不
父視圖。
子視圖是由兒童視圖控制器管理就會以到所有方向。
我曾嘗試:
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)
}
ChildViewController
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return .All
}
override func shouldAutorotate() -> Bool {
return true
}
在Xcode部署信息支撐取向被設置爲四個。
我會得到什麼:
視圖的旋轉沒有。如果我將父級的旋轉設置爲全部,則所有視圖一起旋轉。所以這是全部或沒有。
UPDATE
,當我試圖把一個觀察員UIDeviceOrientationDidChangeNotification和使用UIDevice.currentDevice()。方向用CGAffaineTransformMakeRotate旋轉childView,我得到想要的結果。但是,即,如果我旋轉到橫向,並嘗試拉下通知中心(或者如果我得到系統通知),它仍然處於縱向方向(因爲應用程序本身仍然保留在縱向中),旋轉childView旋轉回肖像狀態欄/通知/通知中心。
股票iOS相機應用程序是我可以提供的最好的例子。主畫布不旋轉到不同的方向,但狀態欄在幕後旋轉以遵守設備旋轉。此外,子視圖也會自我旋轉以表達不同的傾向。我試圖實現此行爲....
不知道這是否會起作用,只是把它當作一個想法。我肯定會設置應用程序只支持一個(人像)方向,然後我會嘗試檢測設備的旋轉(而不是屏幕),並通過在屏幕中間手動旋轉視圖來響應該設置。我猜'viewWillTransition(to:with:)'不起作用,所以你需要找到一個合適的解決方案。 – Andrej
你的意思是使用CGAffineTransform之類的東西進行旋轉? – Gizmodo
是的,完全是CGAffineTransform。你有一個有趣的情況。我很樂意幫忙,並且試着寫一些代碼來解決這個問題,但是恐怕我會很安靜,所以我不能在這裏弄髒我的手。 – Andrej