0

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

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

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

4

3 回答 3

1

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

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

我自己从未尝试过以下操作:您可以尝试对标签栏控制器进行子类化,并shouldAutorotateToInterfaceOrientation根据当前向用户显示的视图做出相应的响应。但我担心 Apple 有充分的理由强迫我们为标签栏应用程序中的所有视图支持相同的方向。

于 2012-11-05T09:29:11.710 回答
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);
}

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

于 2012-11-05T09:51:05.070 回答
0

ViewController在横向模式下需要特别尝试:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

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

}
于 2012-11-05T09:32:46.130 回答