我正在使用XCode 4.6和iOS 6.1。但我的应用程序不会改变方向。我已将我的应用程序设置为支持pList中的方向并添加了方向更改方法。但是应用程序仍然没有改变方向。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
我正在使用TabBarController,我正在使用此代码添加它。
self.window.rootViewController = self.tabController;
在iOS 6模拟器中,所有工作正常,但对于iOS 5,它不起作用。
答案 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
希望这会有所帮助。