我有有一个按钮其推动新视图(InfoViewController)一个MainViewController,经由翻转horizontailly。 像这样:
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];
该控制器的MainView支持肖像和PortraitUpsideDown。 像这样:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return (UIInterfaceOrientationMaskPortrait |
UIInterfaceOrientationMaskPortraitUpsideDown);
}
在我的InfoViewController还指出上面的代码。 在我的AppDelegate它有这个在LaunchOptions:
[self.window setRootViewController:self.mainViewController];
在我的app.plist文件,它支持所有方向。 这是因为其他视图需要支持的风景也是如此。 所以,在我的MainViewController和InfoViewController我只需要纵向和PortraitUpsideDown。 但另一种观点认为我需要所有orintations。
我MainViewController工作正常,但我InfoViewController正在为所有方向。
我有极端diffulty试图让这个在iOS6的工作。 我研究其他职位,尝试过其他人提供的援助,但没有运气任何责任。 请有人可以帮助我达致这谢谢。 而我是一个Objective-C的新手:P
鸵鸟政策支持所有方位在你的应用plist文件,只有你的根视图控制器支持。
自转是在IOS 6改变在iOS 6中,所述shouldAutorotateToInterfaceOrientation:
UIViewController中的方法已被弃用。 在其位,你应该使用supportedInterfaceOrientationsForWindow:
和shouldAutorotate
方法:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
莫代尔ViewControllers不再在iOS 6旋转呼叫:该willRotateToInterfaceOrientation:duration:,
willAnimateRotationToInterfaceOrientation:duration:,
并didRotateFromInterfaceOrientation:
方法不再调用的任何视图控制器,使一个全屏幕演示过自己,比如那些呼吁搭配: presentViewController:animated:completion:
。
你可以让呈现你的模式视图控制器视图控制器通知它旋转。 此外,现在你用: presentViewController:animated:completion:
展示视图控制器。 presentModalViewController:animated:
被淘汰,你在代码中使用。
我已经解决了类似的问题,在使用标签栏控制器。
子类的UITabBarController。 实现这些方法:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
- (BOOL)shouldAutorotate
{
NSLog(@"Orientation:%d", [[UIDevice currentDevice] orientation]);
for (UIViewController *viewController in self.viewControllers) {
[viewController shouldAutorotate];
}
return YES;
}
如果你想处理在内部tabbarcontroller控制器旋转,在每个标签栏控制器控制器的实现这些方法也和编写代码来处理的方向变化。 如果你不想处理它,那么你并不需要实现这些方法。 当朝向改变TabBarControllers方法将总是运行。 即使两次原因不明。
是的,不要忘记删除所有shouldAutorotate方法。 我搬到了新的方向模型完全。 如果你想保持他们,也许将变得更加困难。
通过继承的UINavigationController做一个类别和实施.h文件中以下methodes
-(BOOL)shouldAutorotate;
-(NSUInteger)supportedInterfaceOrientations;
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;
in .m file
-(BOOL)shouldAutorotate
{
return [self.topViewController shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [self.topViewController supportedInterfaceOrientations];
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [self.topViewController preferredInterfaceOrientationForPresentation];
}
并实现以下的视图控制器类methodes,U类要启用旋转
-(NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown);
}
- (BOOL)shouldAutorotate
{
return YES;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeLeft;
}
加上子类的UITabBarController .M验证码
@implementation UINavigationController (rotation)
//temp hack for iOS6, this allows passing supportedInterfaceOrientations to child viewcontrollers.
- (NSUInteger)supportedInterfaceOrientations {
return [self.topViewController supportedInterfaceOrientations];
}
@end
@implementation NameClassUITabBar
- (void)viewDidLoad {
[super viewDidLoad];
}
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscape;
}
@end
在这里,我贴在旋转标签栏控制器我的解决方案/的遭遇: http://luterr.blogspot.sg/2015/04/example-code-uiinterfaceorientationmask.html