如何使一个UIView保持固定位置,而其余所有自动旋转?

时间:2012-08-10 06:31:52

标签: ipad uinavigationcontroller orientation autorotate

我正在尝试使用UINavigationController创建一个UI,它将一些带有子UIViewController的UIViewController作为侧边栏视图。在横向方向上,它应该是右侧的条纹。在旋转到肖像时,它将保持在物理侧,而UINavigationController自动旋转,其他一切都与它一起。在纵向方向上,侧边栏因此成为底栏。

请看看样机。 UI Mockup

现在,怎么做?为NO返回shouldAutorotateToInterfaceOrientation:interfaceOrientation:并不会停止该侧边栏的轮换: - /

4 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分: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];

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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