1. 程式人生 > >IOS程式碼管控APP頁面橫豎屏切換

IOS程式碼管控APP頁面橫豎屏切換

rootNavigationController這個類其實平平⽆無奇,關鍵在於下⾯面三個⽅方法:

-(BOOL)shouldAutorotate
{

return YES;}

-(NSUInteger)supportedInterfaceOrientations
{
    return [self.viewControllers.lastObject
supportedInterfaceOrientations];
}
-
(UIInterfaceOrientation)preferredInterfaceOrientation
ForPresentation
{
    return [self.viewControllers.lastObject
preferredInterfaceOrientationForPresentation];
}

這三個方法就是用來控制所有的頁面的橫豎屏的;這三個方法是系統級的;

你不寫是有另外一套規則;你寫上去,自己不呼叫,也是會執行的.

app啟動首先走 main函式,然後main函式呼叫AppDelegate ,AppDelegate再呼叫UINavigationController,UINavigationController在調才是你的介面.

UINavigationController  繼承的也是UIViewController ;

但他比UIViewController更進一步.

一個app中一般來講就一個 UINavigationController的例項在執行,所謂的UIViewController 都是在這個UINavigationController 執行的.

而且我們在做view push /pop操作的時候,其實都是在navigationController這個裡面做的.

就是這個app全域性的唯一例項UINavigationController  

(當然,不自定義這個rootNavigationController類也是可以的嘛,初學者進公司面試的時候,面試官不是經常問這樣的問題嘛,如何進行類擴充套件啊?各位看官自己回想一下咯,我在這裡就不再贅述了)

3.當然,你要使用橫豎螢幕切換,Device Orientation,上下左右四個方向就不能只勾選一個方向了,當然你要看你的專案所需要支援的方向,來判定,用哪幾個點選哪幾個。


然後,後面的UIViewController  都可以用程式碼來控制橫豎屏了.

4.當然另外需要注意的是,還要在AppDelegate新增上以下方法:

- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window

{

// iPhone doesn't support upside down by default, while the iPad does.  Override to allow all orientations always, and let the root view controller decide what's allowed (the supported orientations mask gets intersected).    

returnUIInterfaceOrientationMaskAll;

}

5.後面的頁面控制橫豎平方法:

簡單來講直接新增以下方法就好,當然,這是個強制豎屏的例子

-(NSUInteger)supportedInterfaceOrientations{

returnUIInterfaceOrientationMaskPortrait;

}

- (BOOL)shouldAutorotate

{

returnNO;

}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

returnUIInterfaceOrientationPortrait;

}

每個方法的意思和左右我就不詳細解釋了,自己去查文件,話說直接直接command+左鍵也能夠看標頭檔案吧,裡面註釋的也很清楚。

這是個強制右轉的例子

- (BOOL)shouldAutorotate

{

returnNO;

}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

returnUIInterfaceOrientationLandscapeRight;

}

-(NSUInteger)supportedInterfaceOrientations

{

returnUIInterfaceOrientationMaskLandscapeRight;

}

當然,shouldAutorotate是用來控制自動旋轉的,你可以設定

6.另外,重要的是,從A(豎屏)切換到B(橫屏),不能用ApushViewControllerB,

必須用A presentViewController B

[self.navigationController pushViewController:B animated:YES];(X)

[self presentViewController:B animated:YES completion:Nil];(V)

問題在哪你們自己體會吧。

示例demo,下載連結 http://code4app.com/ios/53c78e77933bf098108b4ea0