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

时间:2011-02-06 11:55:16

标签: iphone objective-c uinavigationcontroller autorotate

我在导航堆栈上有ViewControllers A和B. A不支持横向,B确实如此。如果用户在观看B时旋转到横向,然后点击“返回”按钮,则A现在处于横向状态。我该如何防止这种情况?是否有充分的理由不尊重A的shouldAutorotateToInterfaceOrientation方法?

2 个答案:

答案 0 :(得分:2)

这对于视图控制器来说真的很烦人。而且似乎无法解决自转问题。也许,最好的是从B的shouldAutorotateToInterfaceOrientation返回NO,然后手动执行视图旋转。那么它不会影响A。

答案 1 :(得分:1)

是的,我也讨厌这个...... 我发现要解决的就是自己做:

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

当你导航到A.view时,你可以在main / super UIViewController中调用myAutomaticRotation, 在同一个地方你应该使用:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

}

您可以在其中查看所使用的视图(A,B)并仅为B ...

提供横向模式

卢卡