在同一故事板上的2个视图控制器之间切换,使用willAutorotateTo轮换...不工作,

Mac*_*gan 5 objective-c interface-builder uiviewcontroller screen-orientation ios

我在这里遇到一点问题.我在同一个故事板上有两个视图控制器(MainStoryboard - >纵向模式下的Calc视图控制器和横向模式下的Calc视图控制器).当我最初创建一个boolfor shouldAutoRotate它确实旋转然而"仍然是"一个渲染问题,因为一些按钮等不在你期望它们的位置,换句话说它们在横向模式中都到处都是.所以现在我在横向模式和主肖像模式下创建了2个视图控制器.所以现在关键是在旋转时在这两个控制器之间切换.

在CalculatorViewController.mi中有
UPDATE
我注意到一些方法从iOS 6中删除了(那就是我现在使用的那个)经过一些研究我发现在iOS 6中"有点正确的方法"就是这个

@synthesize portraitView, landscapeView;

-(BOOL)shouldAutorotate
{
    return YES;
}
-(NSUInteger)supportedInterfaceOrientations:toInterfaceOrientation
{
    if(UIInterfaceOrientationMaskAllButUpsideDown)
    {
        if ( UIInterfaceOrientationPortrait )
        {
            self.view = portraitView;
        }
        else if ( UIInterfaceOrientationLandscapeLeft )
        {
            self.view = landscapeView;
        }

    }
    return YES;

}    
Run Code Online (Sandbox Code Playgroud)

然而,虽然我认为我使用的是关于iOS 6的正确方法,但仍然无法在旋转时调用正确的视图控制器

并在CalculatorViewController.h中

@interface CalculatorViewController : UIViewController {


    IBOutlet UIView *portraitView; // declaring view - portrait
    IBOutlet UIView *landscapeView; // declaring view - landscape
    //rest of irrelevant code below

}
@property (nonatomic, retain) UIView *portraitView;
@property (nonatomic, retain) UIView *landscapeView;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 只需忽略它们现在无关的那两个白色控制器.提交图片以显示这两个视图控制器

感谢您的时间

Set*_*hHB 3

我已经做过几次这样的事情,并且让 ViewController 具有空白视图通常更容易。然后只需将横向视图添加为横向的主要子视图,然后在旋转到纵向等时将其删除。如果您尝试使用单独的 VC,那么您将有一堆混乱的状态保存代码,只是为了顺利过渡。

您甚至可以通过让两者不断成为子视图并在适当的时候显示/隐藏它们来摆弄此设计。这会占用更多内存,但您可以做一些漂亮的过渡动画。

这样,所有连接和逻辑都将位于单个 VC 中,而只是界面会发生变化。