无论旋转如何锁定方向

时间:2012-11-05 08:56:28

标签: iphone objective-c ios orientation

我有一个UITabBar应用程序,其中嵌入了UINavigation用于某些视图。在一个特定的导航视图中,我显示图形/图表,最好在landscape中显示它们,就像iPhone向左或向右旋转一样。该应用程序的其余部分更适合肖像。因此,无论用户如何物理旋转设备,我都希望“强制”包含图形的视图加载到横向中。我试过了:

#pragma mark - Rotation
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

但这似乎对视图没有任何作用。如果我为目标选择“支持的界面方向”中的“横向左侧”图标,则它允许整个应用程序重新定向设备的旋转。有没有办法以纵向方式锁定我的所有普通视图的应用程序,并锁定包含图形的视图,以便应用程序忽略实际的设备方向?

3 个答案:

答案 0 :(得分:1)

你是对的。在标签栏应用程序中,它不是被调用的各个视图控制器的shouldAutorotateToInterfaceOrientation:方法。仅调用选项卡栏控制器shouldAutorotateToInterfaceOrientation以确定是否以及如何定向视图。

但是,各个视图控制器无论如何都应该相应地实现shouldAutorotateToInterfaceOrientation。当推或拉视图控制器时,这些方法仍用于确定动画效果的方向。

我自己从未尝试过以下内容:您可以尝试对标签栏控制器进行子类化并相应地响应shouldAutorotateToInterfaceOrientation,具体取决于当前向用户显示的视图。 但我担心Apple有充分的理由强迫我们在标签栏应用中支持所有观点的相同方向。

答案 1 :(得分:0)

尝试在横向模式中需要的特定ViewController

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight );

}

答案 2 :(得分:0)

首先我使用的是iOS 6 SDK。

我正在使用自定义TabBar控制器。 并通过以下代码集控制TabBar控制器的方向

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // You do not need this method if you are not supporting earlier iOS Versions
    return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.selectedViewController supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate
{
    return YES;
}

视图控制器应该包含

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
    return UIInterfaceOrientationIsLandscape(orientation);
}

这就是我所做的,并且能够将视图锁定为横向或纵向(在我的情况下)。要强制,您可以设置警报视图,说明用户将设备转为横向并向他显示图表。只是一个建议。