显示视图时处理方向

时间:2011-09-06 19:06:42

标签: iphone uiview orientation-changes

当方向发生变化时,我对UIView进行了一些更改。这很好用。在已经切换电话方向后添加视图时出现问题。这导致没有调用任何旋转方法,因此没有给我机会进行更改。

可能在ViewDidLoad中处理此问题的正确方法是什么?我能够在那时检测到当前的方向吗?

请记住,我需要做一些小改动,所以我不想加载不同的笔尖或类似的东西

非常感谢你:)

编辑*只是为了清理:正如我所提到的,当设备方向改变时,视图甚至还没有被实例化。方向变为横向 - >用户单击显示另一个视图的按钮 - >这个新视图被创建并显示,但其默认定位是纵向 - >当显示视图时,我在willAnimateRotationToInterfaceOrientation方法中重新排列的元素位于错误的位置。

1 个答案:

答案 0 :(得分:1)

通常我会在willAnimateToInterfaceOrientation方法中放置用户旋转设备时发生的动画(主要是操纵视图框)。在它的骨架形式中它看起来像这样:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
                                         duration:(NSTimeInterval)duration
{
    //NSLog(@"willAnimateRotationToInterfaceOrientation: %d", toInterfaceOrientation);

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
    {
        // portrait
    }
    else
    {
        // landscape
    }
}

编辑:在我需要记住设备轮换以备将来使用的情况下,我在我的视图控制器类中设置一个名为currentOrientation(类型为int)的ivar,然后执行以下操作:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    //NSLog(@"shouldAutorotateToInterfaceOrientation: %d", toInterfaceOrientation);

    if (toInterfaceOrientation == UIDeviceOrientationPortrait || toInterfaceOrientation == UIDeviceOrientationPortraitUpsideDown ||
        toInterfaceOrientation == UIDeviceOrientationLandscapeLeft || toInterfaceOrientation == UIDeviceOrientationLandscapeRight)
    {
        currentOrientation = toInterfaceOrientation;
    }

    return YES;
}

然后在视图控制器中运行方法时,我知道设备所处的方向。