我以前从未做过-像这样更改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中的“创建备用景观界面”下有关于此的更多信息。