我以前从未做过-像这样更改ViewController的UIView,所以尽管它似乎运行良好,但我不确定这是否是个好主意-是否可能导致任何重大错误。它使用Storybards,但viewLandscape是从nib加载的

因此,我开始在ViewDidLoad中保留指向当前视图的指针,我假设viewDidLoad为纵向时的第一个视图,我怎么能绝对确定呢?然后我从笔尖初始化风景视图。

// Assumes UIView loaded at start is portrait
self.viewPortrait = [[UIView alloc]initWithFrame:self.view.bounds];
self.viewPortrait = self.view;

UIView *landscapeView = [[[NSBundle mainBundle] loadNibNamed:@"LandscapeView" owner:self options:nil] objectAtIndex:0];
NSLog(@"view %@", landscapeView);
self.viewLandscape = [[UIView alloc]initWithFrame:landscapeView.bounds];
self.viewLandscape = landscapeView;

现在,我根据界面方向设置要显示的视图,非常简单!但这是我应该知道的吗?还有一件事,我在横向视图上有一个标签,如何在ViewController中获得指向该标签的指针(从笔尖指向情节提要视图的View Controller的指针)
-(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    NSLog(@"will rotate");
    switch (toInterfaceOrientation)
    {
        case UIInterfaceOrientationPortrait:
        case UIInterfaceOrientationPortraitUpsideDown:
            self.view = self.viewPortrait;
            break;

        case UIInterfaceOrientationLandscapeLeft:
        case UIInterfaceOrientationLandscapeRight:
            self.view = self.viewLandscape;
            break;
    }
}

最佳答案

通常的方法是使用不同的水平视图控制器,并通过交叉淡入淡出从垂直VC中显示该视图控制器。在View Controller Programming Guide中的“创建备用景观界面”下有关于此的更多信息。

10-08 05:31