无法在iPad上正确旋转已翻译的UIView

时间:2011-02-06 12:08:01

标签: iphone ipad ios uiviewcontroller rotation

我有一个UIViewController里面有两个UIViews,其布局(在Interface Builder中设置)是这样的(品红色视图是UIViewController默认视图):

enter image description here

我将主视图添加到获得此效果的根视图中(通过不显示将其frame放在底部的较暗视图):

enter image description here

现在当设备旋转时,我得到的是:

enter image description here

而我仍然希望隐藏更黑暗的视图。 这是我用来隐藏它的代码(我在viewDidLoad方法中使用它):

- (void)hideAll:(float)time{
        CGRect hiddenFrame = CGRectMake(0, 1024, self.view.frame.size.width, self.view.frame.size.height);
        [self.view setFrame:hiddenFrame];
        [self.view setNeedsDisplay];
}

它似乎有用,但是当我在旋转时调用它的变体(在willRotateToInterfaceOrientation:duration:中)时,没有任何反应:

    CGRect hiddenFrame = CGRectMake(0, 748, self.view.frame.size.width, self.view.frame.size.height);
    [self.view setFrame:hiddenFrame];
    [self.view setNeedsDisplay];

我错过了什么?让我在Interface Builder中设置一些其他视图属性吗?

更新

在我看来,旋转设备后坐标系不会改变(即在横向模式下顺时针旋转后,纵向模式左上角设置的原点将变为右上角)

3 个答案:

答案 0 :(得分:1)

检查IB中的支柱和弹簧。也许当您自动旋转时,将您固定在屏幕顶部的支柱会将您的框架移回顶部。

尝试将您的代码添加到didRotateToInterfaceOrientation方法中,以便它可以在轮换发生后运行。

答案 1 :(得分:0)

为什么要更改框架以隐藏它,而不仅仅是

[self.view setHidden:YES];

第二件事是您应该尝试设置“自动调整”面板来处理方向更改,而不是通过更改视图的框架。

希望我理解你。

SHANI

答案 2 :(得分:0)

我遇到的问题可以通过两种方式面对(我希望将来可以节省一些时间):

  • 使用UIViewcontroller(从xib加载)并仅将其视图作为旋转视图,这是我原来尝试解决它。在这种情况下,你必须以编程方式设置视图的框架,当你想隐藏它时,你必须考虑到控制器的坐标系保持不变并且不旋转(即它始终来自于同一个角落)
  • 在已经存在的UIViewcontroller中使用UIView(从xib加载),这样视图将自动旋转并调整大小,并且您不必在每次旋转时考虑正确的坐标值(这是迄今为止最简单的)方式)