0

当方向改变时,我对 UIView 进行了一些更改。这工作正常。在手机方向已经切换后添加视图时会出现问题。这导致不调用任何旋转方法,因此不给我机会进行更改。

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

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

非常感谢你 :)

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

4

1 回答 1

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;
}

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

于 2011-09-06T19:34:00.690 回答