我对拥有支持所有方向的UIViewController感兴趣,并且干净地使用两个xib文件来设置其子视图。
似乎有一种可能性是使用NSBundle的loadNibNamed:
方法在每次轮换时加载新的视图层次结构,但这看起来效率低下,并且可能会产生不幸的副作用。例如,从nib文件重新加载后,我的所有视图都将丢失其先前的状态,例如向文本字段添加文本等。
有更好的方法吗?
答案 0 :(得分:3)
经过一些更多的研究,我无法找到一个优雅的解决方案。因为在每次旋转时从xib文件重新加载元素似乎很慢并且消除了任何基于动态视图的数据,所以我切换到基于代码的设置(即没有更多的xib文件)。
我决定创建一个这样的方法:
// This is for an iPad root-level view controller.
- (void)setupForOrientation:(UIInterfaceOrientation)orientation {
if (UIInterfaceOrientationIsPortrait(orientation)) {
CGRect bounds = CGRectMake(0, 0, 768, 1004);
bkgImageView.frame = bounds;
// Other view positioning for portrait.
} else {
CGRect bounds = CGRectMake(0, 0, 1024, 748);
bkgImageView.frame = bounds;
// Other view positioning for landscape.
}
[self drawBackgroundForOrientation:orientation];
}
此方法从shouldAutorotateToInterfaceOrientation:
方法调用,并递交新方向。
答案 1 :(得分:1)
不是从shouldAutorotateToInterfaceOrientation调用你的函数,你只需要说YES或NO,你应该在委托函数中真正做你喜欢的事情,比如willRotateToInterfaceOrientation,这意味着做你正在做的事情。