UIViewController不会旋转到横向

时间:2012-09-05 17:45:42

标签: ios uiviewcontroller ios4

在许多情况下需要旋转控制器而不能正常工作。 现在我有问题的反面:它正在旋转,我想禁用。

在那个ViewController中我有这个:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}

但是它是自动旋转的,因为不是这个UIViewController被问到,而是他的父亲在UI树中。也许这就是问题所在。 根控制器必须为所有情况返回Yes,因为堆栈上还有一些其他UIViewControllers,它们必须具有Portait / Landscape支持。

我不能/不想触摸其他部分,因为...有几个原因,例如:应用程序很大,有很多已知错误,我不想做1并测试它持续1周,其他是截止日期。

请不要暗示它不应该像这样,必须重写。我知道。

如何处理此控制器以强制使用Portait?

请阅读粗体文字:无法强制整个应用程序仅支持1个视图控制器的Portait,堆叠有很多!

2 个答案:

答案 0 :(得分:2)

尝试将属性文件中应用程序支持的界面方向标记为仅为纵向。但是当然在该函数中,您只需在要允许旋转的视图控制器上返回YES。但是当你把它推回堆栈时,其他视图应该是肖像。

portrait only orientations

答案 1 :(得分:1)

检测横向旋转并旋转到Portait:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{ 

    UIInterfaceOrientation appOrientation = [UIApplication sharedApplication].statusBarOrientation;
    float width = self.view.bounds.size.width;
    float height = self.view.bounds.size.height;
    //NSLog(@"width %3.0f, height: %3.0f", width, height);

    if((fromInterfaceOrientation == UIInterfaceOrientationPortrait || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)){
        // if is rotated from Portait:
        if((appOrientation == UIInterfaceOrientationLandscapeLeft || appOrientation == UIInterfaceOrientationLandscapeRight)){
            // to Landscape:
            CGAffineTransform transform = self.view.transform;
            transform = CGAffineTransformRotate(transform, -(M_PI / 2.0));
            self.view.transform = transform;            

            [self.view setBounds:CGRectMake(0, 0, height, width)];
        }
    }
    else {
        // it is rotated from Landscape:
        if((appOrientation == UIInterfaceOrientationPortrait || appOrientation == UIInterfaceOrientationPortraitUpsideDown)){
            // to Portrait:            
            CGAffineTransform transform = self.view.transform;
            transform = CGAffineTransformRotate(transform, +(M_PI / 2.0));
            self.view.transform = transform;            

            [self.view setBounds:CGRectMake(0, 0, height, width)];
        }
    } 
}

它不是最好的编程范例,但它可以解决这个问题。

如果可以的话,有人会像tis那样写下接受他的答案,或者写一个更好的方法!