我的应用不会改变方向

时间:2013-03-15 11:48:42

标签: iphone ios orientation

我正在使用XCode 4.6和iOS 6.1。但我的应用程序不会改变方向。我已将我的应用程序设置为支持pList中的方向并添加了方向更改方法。但是应用程序仍然没有改变方向。

enter image description here

enter image description here

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}

我正在使用TabBarController,我正在使用此代码添加它。

self.window.rootViewController = self.tabController;

在iOS 6模拟器中,所有工作正常,但对于iOS 5,它不起作用。

4 个答案:

答案 0 :(得分:2)

检查方向是否有效?

代码::

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
    ......
}

检查方法::

-(void)orientationChanged {

   NSLog(@"Orientation Changed..!!");
}

方向更改方法代码

在PCH文件中,

#define IOS_OLDER_THAN_6        ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] < 6.0 )
#define IOS_NEWER_OR_EQUAL_TO_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] >= 6.0 )

在.m文件中,

//For Less than IOS 6

#ifdef IOS_OLDER_THAN_6
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation
{
   return toInterfaceOrientation;
}
#endif

// For Newer than IOS 6.
#ifdef IOS_NEWER_OR_EQUAL_TO_6
-(BOOL)shouldAutorotate
{
   return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
   return (UIInterfaceOrientationMaskAll);
}
#endif

希望对你有所帮助。

感谢。

答案 1 :(得分:1)

您需要使用这两种新方法来控制和配置viewControllers的方向更改:

- (BOOL)shouldAutorotate {
    return YES;    
}

- (NSUInteger)supportedInterfaceOrientations {    
    return (UIInterfaceOrientationMaskPortrait | 
            UIInterfaceOrientationMaskPortraitUpsideDown);
}

您实施的方法适用于iOS 5.x,但本答案中提到的方法适用于iOS 6.x.如果要同时兼容两个OS版本,则需要在viewController中实现这两种方法。

答案 2 :(得分:0)

在最顶层的导航控制器中,定义:

-(BOOL)shouldAutorotate {return [self.visibleViewController shouldAutorotate];}

并在你的下一个viewController:

-(BOOL)shouldAutorotate {return YES;}

-(NSUInteger)supportedInterfaceOrientations {  
return (UIInterfaceOrientationMaskPortrait | 
        UIInterfaceOrientationMaskPortraitUpsideDown);
}

答案 3 :(得分:0)

您正在使用tabBar,因此请将此代码放在@end底部的AppDelegate中。

@implementation UITabBarController (Rotation)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{   
    if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) {
        UIViewController *rootController = [((UINavigationController *)self.selectedViewController).viewControllers objectAtIndex:0];
        return [rootController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
    }
    return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

@end

希望这会有所帮助。