Iphone 如何只允许导航堆栈中的一个视图旋转?

Iphone 如何只允许导航堆栈中的一个视图旋转?,iphone,objective-c,uinavigationcontroller,autorotate,Iphone,Objective C,Uinavigationcontroller,Autorotate,我在导航堆栈上有ViewController A和B。A不支持横向,B支持横向。如果用户在查看B时旋转到横向,然后点击后退按钮,则A现在处于横向。我如何防止这种情况?是否有充分的理由不尊重a的shouldAutorotateToInterfaceOrientation方法?这对于视图控制器来说确实是非常恼人的事情。而且它似乎无法修复自动旋转。也许,最好是从B的shouldAutorotateToInterfaceOrientation返回NO,然后手动执行视图旋转。那就不会影响A了。是的,我也讨

我在导航堆栈上有ViewController A和B。A不支持横向,B支持横向。如果用户在查看B时旋转到横向,然后点击后退按钮,则A现在处于横向。我如何防止这种情况?是否有充分的理由不尊重a的shouldAutorotateToInterfaceOrientation方法?

这对于视图控制器来说确实是非常恼人的事情。而且它似乎无法修复自动旋转。也许,最好是从B的shouldAutorotateToInterfaceOrientation返回NO,然后手动执行视图旋转。那就不会影响A了。

是的,我也讨厌这样。。。 我发现解决这个问题的唯一办法就是自己动手:

- (void)myAutomaticRotation{
    if (A.view.frame.size.width > A.view.frame.size.height) {
        [UIView beginAnimations:@"View Flip" context:nil];
        [UIView setAnimationDuration: 0.5f];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
        self.view.bounds = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
        A.view.frame = CGRectMake(0,0,320, 480);
        [UIView commitAnimations];
    }
}
导航到.view时,可以在主/超级UIViewController中调用myAutomaticRotation, 在同一个地方,您应该使用:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

}
在这里,您可以检查使用的视图(A,B),并允许仅为B使用横向模式


卢卡

我不明白为什么Cocoa Touch在所有的autorotate业务中都做了那么多,但却无法解释这种简单而常见的情况+谢谢你把这个放在那里。谢谢你这里的代码。我认为Max建议在每个viewController中分别处理旋转,这有点干净。把我的头发拔出来!如何手动强制改变方向?问题是,我需要有实际的方向变化,以便键盘显示在正确的位置。