能夠?qū)崿F(xiàn)的功能
1.啟動(dòng)頁(yè)的屏幕方向任你選擇
2.達(dá)到每個(gè)控制器都可以自由調(diào)整橫豎屏方向.
建議
項(xiàng)目中最好用約束來實(shí)現(xiàn)界面的布局,因?yàn)槠聊话l(fā)生旋轉(zhuǎn)后控制器都會(huì)調(diào)用
- viewWillLayoutSubviews
- viewDidLayoutSubviews
這兩個(gè)方法,所以通過約束可以實(shí)時(shí)的根據(jù)屏幕調(diào)整尺寸,而通過計(jì)算出來的frame是在 viewDidLoad 這個(gè)方法中計(jì)算出來的,屏幕旋轉(zhuǎn)不會(huì)再次調(diào)用這個(gè)方法
1.在AppDelegate 中實(shí)現(xiàn)以下代理方法
- (UIInterfaceOrientationMask)application:(UIApplication *)application
supportedInterfaceOrientationsForWindow:(UIWindow *)window
代理中已經(jīng)返回了支持的反向,系統(tǒng)不會(huì)從.info中獲取了
2.在根控制器重寫以下屬性
在一個(gè)控制器第一次即將顯示時(shí)會(huì)先調(diào)用appDelegate這個(gè)方法
- (UIInterfaceOrientationMask)application:(UIApplication *)application
supportedInterfaceOrientationsForWindow:(UIWindow *)window
然后調(diào)用
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
///設(shè)備支持的方向
- (BOOL)shouldAutorotate
///設(shè)備旋轉(zhuǎn)方向后是否重新布局,更新尺寸
最后在調(diào)用appDelegate的方法
topViewController 是導(dǎo)航欄的棧頂控制器,push 進(jìn)來的控制器
visibleViewController 是導(dǎo)航欄的可見控制器淹冰,
總之要知道優(yōu)先級(jí)的問題羞延,general == appDelegate >> rootViewController >> nomalViewController
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
/// 只在present 時(shí)會(huì)調(diào)用拷淘,
/// 這個(gè)方法優(yōu)先級(jí)比supportInTerFace高撇他,當(dāng)這個(gè)方法支持的,supportInTerFace沒有支持會(huì)造成崩潰
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:
(id<UIViewControllerTransitionCoordinator>)coordinator
當(dāng)屏幕發(fā)生旋轉(zhuǎn)時(shí)誊抛,就會(huì)觸發(fā)這個(gè)方法