如何创建一个支持横向和纵向但不在它们之间旋转的视图控制器(保持其初始方向)

时间:2011-01-05 01:45:46

标签: iphone ios uiviewcontroller

我想创建一个支持横向和纵向方向的视图控制器,但不能在它们之间旋转 - 也就是说,视图应保持其原始方向。

我尝试创建一个ivar initialOrientation并在-viewDidAppear中设置

initialOrientation = self.interfaceOrientation;

然后

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == initialOrientation);
}

但这会导致令人困惑的问题(可能是因为-shouldAutorotateToInterfaceOrientation之前调用-viewDidAppear)。

如何将方向锁定到原始方向?

2 个答案:

答案 0 :(得分:1)

我猜,我是在正确的轨道上。我通过使initialOrientation属性,然后从调用viewController:

设置它来解决这个问题
OrientationLockedViewController *vc = [[OrientationLockedViewController alloc] init];
vc.initialOrientation = self.interfaceOrientation;

现在我在OrientationLockedViewController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == self.initialOrientation);
}

答案 1 :(得分:0)

这有点奇怪的要求,而不是我认为UIKit旨在处理的东西。当UIKit调用-shouldAutorotateToInterfaceOrientation或者它可以缓存这些结果时,我不会认为它有记录,所以如果这种行为很重要,我会看到两种可能性。

  1. 提前设置initialOrientiation,如果不提前启动视图控制器,那么-shouldAutorotateToInterfaceOrientation行为永远不会改变,但应用会尊重它开始的方向。

    < / LI>
  2. 在显示此控制器的视图之前检测设备方向,并自行应用视图的旋转变换。根据您的视图控制器层次结构,您可能需要宣传支持所有旋转以允许设备旋转,然后在视图上设置变换以始终旋转到相同的方向,而不管设备的方向如何。