Iphone UITabBarController与使用不同方向的VIEW控制器?

Iphone UITabBarController与使用不同方向的VIEW控制器?,iphone,uinavigationcontroller,uitabbarcontroller,uiinterfaceorientation,Iphone,Uinavigationcontroller,Uitabbarcontroller,Uiinterfaceorientation,我可以看出,这件事一直困扰着很多人:/ 我有一个UITabBarController,它有4个视图控制器,都是UINavigationController类型。 其中一个NavigationController将viewController推送到其堆栈上,此viewController应以横向模式/方向显示 viewController是一个图形,它绝对是应用程序中唯一有意义的地方。(我在展示时隐藏了UITabBar,以避免让用户相信这在任何地方都有效) 要使UITabBarController

我可以看出,这件事一直困扰着很多人:/

我有一个UITabBarController,它有4个视图控制器,都是UINavigationController类型。 其中一个NavigationController将viewController推送到其堆栈上,此viewController应以横向模式/方向显示

viewController是一个图形,它绝对是应用程序中唯一有意义的地方。(我在展示时隐藏了UITabBar,以避免让用户相信这在任何地方都有效)

要使UITabBarController正确响应方向的更改,其所有ViewController都需要从委托方法返回相同的值:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
因此,为了适应这种行为,我在属于UITabBarController的所有ViewController中实现了这种方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    BOOL canRotate = [defaults boolForKey:@"can_rotate"];

    return canRotate;
}
现在的“诀窍”是,当按下我的can-be横向视图控制器时,我会执行以下操作:

- (void) viewWillAppear:(BOOL)animated {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:YES forKey:@"can_rotate"];
    [defaults synchronize];

}
- (void) viewWillDisappear:(BOOL)animated {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:NO forKey:@"can_rotate"];
    [defaults synchronize];

}
当它弹出时,我会这样做:

- (void) viewWillAppear:(BOOL)animated {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:YES forKey:@"can_rotate"];
    [defaults synchronize];

}
- (void) viewWillDisappear:(BOOL)animated {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:NO forKey:@"can_rotate"];
    [defaults synchronize];

}
这真的很有效。当viewController位于堆栈上时,我可以旋转设备,视图随之旋转

但是,问题是,如果用户在横向模式下点击导航栏上的“后退”按钮,从而将viewController弹出到以前的viewController,那么这个“旧”viewController当然也处于横向模式。更糟糕的是,因为我将BOOL设置为NO,所以当我将设备定向到纵向模式时,这个“旧”viewController无法向后旋转

是否有一种方法可以更新所有内容,以便在我弹出can in横向模式viewController时,我的其他viewController都不会处于横向模式?

我有点担心,如果这可以从一幅风景画到另一幅肖像画,那么从一幅肖像画到另一幅风景画也应该是可能的,这样我的“黑客”就没有必要了。。但如果不能,那我就回到原点:/


希望我很接近,有人能帮我到达那里,谢谢:)

我想我可以简化整个过程。。。。

//[UIApplication sharedApplication].StatusBaroOrientation=UIInterfaceOrientation和ScapeRight

}

不会自动旋转任何对象,但可以手动旋转要移动的视图。如果视图中不需要键盘支持,则无需更改statusBarOrientation


如果你不总是希望视图旋转,那么你有一个稍微困难的问题-你可能想检查加速计的值,以确定手机是朝哪个方向旋转的(或者,您可以通过拨打shouldAutotateToInterfaceOrientation来暗示手机的切换方式,然后根据需要拨打转换代码。

您好,谢谢:)这确实简化了很多事情。我如何让导航栏也旋转呢?啊,刚刚尝试了一个显而易见的方法:self.navigationController.navigationBar.transform=cgfaffinetransformidentity;self.navigationController.navigationBar.transform=cgffinetransformmakerotation(90.0*0.0174532925);self.navigationController.navigationBar.bounds=CGRectMake(0.0f,0.0f,480.0f,30.0f);self.navigationController.navigationBar.center=CGPointMake(160.0f,240.0f);再次感谢。