5

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

在 CalculatorViewController.mi 中有
更新
我注意到一些方法已从 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;

}    

然而,尽管我认为我在 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;

在此处输入图像描述 只需忽略他们现在无关紧要的那 2 个白色控制器。提交图片以显示这 2 个视图控制器

感谢您的时间

4

1 回答 1

3

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

您甚至可以通过同时拥有子视图并在适当时显示/隐藏它们来摆弄这种设计。这会占用更多内存,但您可以制作一些不错的过渡动画。

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

于 2013-02-19T22:16:19.273 回答