在我的应用中,我使用纵向导航控制器启动了第二视图控制器,然后在第四视图控制器中完成了操作,在该控制器中应该旋转iPhone以显示图像。
现在的问题是:
如果在目标中以这种方式设置方向:

我可以使用此方法旋转图像:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

并且它可以正常工作,但是我无法锁定属于navigationcontroller的所有视图,因为它们全部旋转为人像和风景。

第二种选择是以这种方式设置目标:

但是此结构无法检测方向:

在视图中将出现:
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    [self willRotateToInterfaceOrientation:orientation duration:1];

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

- (BOOL)shouldAutorotate
{
        return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscape;
}

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {

        if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
        {

        }
        else
        {

        }
    }

    else{

        if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
        {

        }
        else
        {

        }

    }
}

最好的解决方案是什么?
谢谢

最佳答案

我忍不住觉得,如果我阅读了文档,那可以节省一些时间,但是对我来说,解决方案是子类 UINavigaionController并添加以下内容:

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

而且由于这里实际上没有发生任何实质性的事情,因此无需使用编码器或其他任何方法覆盖init。您可以在以前引用导航控制器(包括Interface Builder)的任何地方引用该子类。

关于ios - iOS:UINavigationController中的锁定方向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18334765/

10-16 04:58