2015-07-10 144 views
0

我想禁用幾個視圖控制器的iOS設備的自動旋轉。就像我有一個控制器,我希望它只能以縱向模式顯示。在其他視圖控制器在橫向模式。我使用了下面的代碼,但這些代表方法永遠不會被調用?如何限制視圖控制器在ios 8中的旋轉?

#pragma mark Orientation handling 

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return (UIInterfaceOrientationMaskPortrait); 
} 
+0

希望這可以幫助你http://stackoverflow.com/questions/31158690/force-the-ios-device-to-change-orientation/31158872#31158872 – Sujania

+0

你是否在一個導航控制器? 如果是這樣,你應該重寫導航控制器中的方法。 – Jaeger

+0

我不在導航控制器內 – Techiee

回答

2

我用下面的方法來強制設置縱向只對一些選定的觀點和我的工作,可能是它會幫助你

1,創建一個全局標誌

在你的AppDelegate方法中的全局標誌上創建所以你可以在任何視圖控制器中訪問它。

在你AppDelegate.h

@property (assign) BOOL flagOrientationAll; 

在你AppDelegate.m

@synthesize flagOrientationAll; 

添加按照您的AppDelegate.m方法

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
    if(flagOrientationAll == YES){ 
     return UIInterfaceOrientationMaskAll; // All orientation support 
    } else { 
     return UIInterfaceOrientationMaskPortrait; // Set only one orientation you want 
    } 
} 

2,添加以下代碼您要限制旋轉的ViewController .m

// set flag "flagOrientationAll" to rotate only one view in your particular view 

#import AppDelegate.h 
-(void)viewWillAppear:(BOOL)animated 
{ 
    NSLog (@"webViewController -- viewWillAppear"); 
    [super viewWillAppear:animated]; 

    AppDelegate *delegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    delegate.flagOrientationAll = YES; 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    delegate.flagOrientationAll = NO; 
} 

這裏我的帖子:How to set one of the screens in landscape mode in iphone?

如果你得到任何麻煩讓我知道!