IOS6之後,若想在項目中支持橫屏,咱們首先須要在plist文件中添加支持橫屏的設置,不然有些代碼設置將會失效。ide
有來那個方式設置:函數
一、在pilist的Supported interface orientations 字段中添加測試
二、在Xcode的設置中勾選code
如今咱們來看決定屏幕方向的幾個函數:繼承
在IOS6以前,咱們只需經過一個函數文檔
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
}it
就能夠支持指定控制器的旋轉。經過新的文檔,咱們能夠看到:io
// Applications should use supportedInterfaceOrientations and/or shouldAutorotate.. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation NS_DEPRECATED_IOS(2_0, 6_0); //這個方法在6.0以後被標記爲過期的
咱們經過下面兩個方法來代替:方法
//是否容許屏幕旋轉im
-(BOOL)shouldAutorotate{
return YES;
}
//支持的方向
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscapeRight;
}
這是個枚舉
typedef NS_OPTIONS(NSUInteger, UIInterfaceOrientationMask) { UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait), UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft), UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight), UIInterfaceOrientationMaskPortraitUpsideDown=(1 << UIInterfaceOrientationPortraitUpsideDown), UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight), UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown), UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight), };
經過這兩個函數,若是咱們須要某個控制器強制方向,咱們能夠設置支持單一的方向,便可達到目的。
注意:
若是大家項目中的RootViewController是導航,你會發現,你在Push出來的視圖中添加剛纔的代碼並無起做用,緣由是導航,並無進行設置,咱們建立一個文件,繼承於NavigationController。在裏面重寫剛纔的方法,這麼作後,屏幕確實橫了過來,而且這個導航push的全部子界面都將橫屏,這也不是咱們想要的效果。咱們想自由的控制每一個push出來的界面的屏幕方向,能夠在導航裏這麼作:
-(BOOL)shouldAutorotate{ return [self.topViewController shouldAutorotate]; } //支持的方向 - (NSUInteger)supportedInterfaceOrientations { return [self.topViewController supportedInterfaceOrientations];; }
咱們還須要作一些處理,通過個人測試,導航必須在pop後纔會從新調用這些函數,因此個人方法是這樣作:彈出一箇中間控制器後再POP回來
@implementation ViewController2 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self.navigationController pushViewController:[[ViewController3 alloc]init] animated:YES]; }
@implementation ViewController3 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self.navigationController popViewControllerAnimated:YES]; }
這樣作,咱們就能夠自由的控制每一個視圖控制器的方向了。
同理,若是根視圖控制器是tabBar,則咱們須要在tabBar中作操做。
若是咱們大可能是的視圖控制器都是一個方向的,只有偶爾的幾個會不一樣,這時候,咱們其實能夠採起presentationController的方式,而後直接在彈出的控制器中寫那兩個方法便可。這是最簡單的途徑了。
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592