4

我正在尝试使用 UINavigationController 创建一个 UI,该 UI 将一些 UIViewController 和一个子 UIViewController 作为侧边栏视图呈现。在横向方向,它应该是右侧的条纹。将其旋转为纵向后,它应保持在该物理侧,而 UINavigationController 会自动旋转以及其他所有内容。因此,在纵向时,侧边栏变成了底部栏。

请看一下模型。 用户界面样机

现在,如何做到这一点?返回NOforshouldAutorotateToInterfaceOrientation:interfaceOrientation:不会停止该侧边栏的旋转:-/

4

4 回答 4

2

在视图控制器的自动旋转检测方法中更改视图的框架和/或变换,如下所示:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)to duration:(NSTimeInterval)duration
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:duration];

    // Calculate the new frame and rotation angle of the view
    // e. g.:

    if (UIInterfaceOrientationIsPortrait(to)) {
        theView.frame = CGRectMake(0, 924, 768, 100);
        theView.transform = CGAffineTransformIdentity;
    } else {
        theView.frame = CGRectMake(924, 0, 100, 768);
        theView.transform = CGAffineTransformMakeRotation(M_PI / 2);
    }

    [UIView commitAnimations];
}
于 2012-08-10T06:40:26.953 回答
1

您不能使用自动旋转来执行此操作,因为您在一个屏幕上混合了两个视图控制器。关闭父视图控制器和子视图控制器的自动旋转,并在检测到旋转时自行进行所需的转换。自动旋转将旋转控制器视图下的所有视图(包括由您的其他视图控制器控制的子视图)。

或者,您可以先将视图滑开(当您收到 willRotateToInterfaceOrientation 时),然后在收到 didRotateFromInterfaceOrientation 时将其滑回正确的方向。

于 2012-08-29T09:05:40.023 回答
1
CGAffineTransform t;
//You have to caculate the angel of view controller rotating    
CGFloat rotateAngel = M_PI / 2;//replace 'M_PI / 2' with your view controllers rotation angel
t = CGAffineTransformMakeRotation(-rotateAngel);
[view setTransform:t];
于 2012-08-10T06:37:59.067 回答
1

是否可以将侧视图与导航控制器视图分开(不要使其成为子视图)。因此,您可以更好地控制旋转。无论如何,您都可以旋转视图内的图像。

于 2012-08-27T19:44:50.017 回答