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

Ipad 如何使一个UIView保持在固定位置,而所有其他UIView自动旋转?,ipad,uinavigationcontroller,orientation,autorotate,Ipad,Uinavigationcontroller,Orientation,Autorotate,我正在尝试创建一个带有UINavigationController的UI,它将一些UIViewController和一个子UIViewController作为侧栏视图呈现。在横向方向上,其应为右侧的条纹。旋转到纵向时,它将停留在物理侧,而UINavigationController将自动旋转,其他一切都将随之旋转。在纵向方向上,侧边栏因此成为底部栏 请看一下模型 现在,如何做到这一点?为返回NO应自动旋转指针FaceOrientation:interfaceOrientation:不会停止该侧栏

我正在尝试创建一个带有UINavigationController的UI,它将一些UIViewController和一个子UIViewController作为侧栏视图呈现。在横向方向上,其应为右侧的条纹。旋转到纵向时,它将停留在物理侧,而UINavigationController将自动旋转,其他一切都将随之旋转。在纵向方向上,侧边栏因此成为底部栏

请看一下模型


现在,如何做到这一点?为
返回
NO
应自动旋转指针FaceOrientation:interfaceOrientation:
不会停止该侧栏的旋转:-/

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

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

是否可以将侧视图与导航控制器视图分开(不要将其设为子视图)。所以你对旋转有了更多的控制。您仍然可以旋转视图中的图像。

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


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

不,不是这样。虽然它近似于所需的结束情况,但它会在整个屏幕上设置条的动画以达到目的。相反,我希望视图不在任何地方移动(分别使其看起来好像没有移动,因为它肯定要对抗控制器对其进行的自动转换)@leberburstsaft,然后使其成为图像。这是唯一合理的解决方案。这与UIView动画有什么不同?此视图不是静态的,它包含子视图本身。严格地说,它不应该只是停留在原地,而是将其长度延伸到纵向包含视图的全宽,并返回到横向包含视图的高度。所以尺寸有点变化。但是位置必须固定在屏幕上,这类解决方案不起作用。我尝试了很多转换代码,使它看起来保持原位。我也尝试过,设置是:一个外部控制器,导航控制器作为子控制器,子视图不应该旋转。我将外部控制器设置为“不自动旋转”,将导航控制器中显示的控制器设置为“自动旋转”,但随后一切都停止了自动旋转。外部(父)控制器设置为“自动旋转”后,它将旋转所有控制器。所以,不幸的是,那不行。这个怎么样。确保一切都按预期自动旋转。在willRotateToInterfaceOrientation中,隐藏要粘贴在一侧的视图。在didRotateToInterfaceOrientation中,界面完全旋转。在这里,你把你的视图放在你想要的地方,然后再次显示。对,这正是我所满足的,因为我无法让它工作。但这并不好,我不喜欢这样,似乎没有真正的解决办法。我希望,我错过了什么。现在,我需要手动重新定位,调整大小,动画视图,以避免在旋转时看起来像驴子。不过还是要谢谢你!不要介意。我做了类似的事情,因为你必须旋转里面的图像,不管怎样,我发现从用户的角度来看,如果视图滑出/滑入,这并不令人不安。祝你好运,还有一件事。您是否尝试过覆盖layoutSubview?你可以存储帧和转换调用super,然后恢复所有内容。是的,滑动/衰减解决方案就是我现在所做的,因为它根本不起作用。不过,亲自做这件事不值得为手头的任务费心。我只是觉得在这种情况下这会是一个很好的行为,但是运气不好。用手做这件事真的不太麻烦,因为你可以通过改变主视图的变换来旋转主视图,然后只需改变子视图的框架以适应屏幕的底部或侧面,这只是两个操作。你可能会发现,这比滑动/淡入淡出的解决方案更容易,并尝试使用自动旋转,因为你将完全控制动画。旋转主视图中依赖于自动旋转的内容太多了,我不认为它归结为这两个操作。