My iPad app大量使用自转。这很棒。但是,我注意到如果didReceiveMemoryWarning
的默认实现(如here所述)发布隐藏视图,则从笔尖重新加载视图时我恰好在景观中,它以纵向加载它。这会对界面造成严重破坏,直到我手动旋转iPad并强制它进入正确的方向。
我原以为iOS会在当前方向加载视图;这就是应用程序启动时的功能。但它没有,不是在被didReceiveMemoryWarning
卸载之后。为什么不?我怎么能这样做呢?
答案 0 :(得分:4)
由于来自dbarker的指针,确定的答案是视图控制器的旋转方法,包括-willRotateToInterfaceOrientation:duration:
和-willAnimateRotationToInterfaceOrientation:duration:
,在视图重新加载之后将不会被调用didReceiveMemoryWarning
的默认实现已卸载视图。我不知道为什么它会在应用程序启动时有所不同,但我确实有一个解决方法
我所做的是在unloadedByMemoryWarning
中设置名为YES
的布尔值,didReceiveMemoryWarning
,如下所示:
- (void) didReceiveMemoryWarning {
unloadedByMemoryWarning = YES;
[super didReceiveMemoryWarning];
}
然后,在viewDidLoad
中,如果该标志为真,我将其设置为NO
,然后自己调用旋转方法:
if (unloadedByMemoryWarning) {
unloadedByMemoryWarning = NO;
[self willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
[self willAnimateRotationToInterfaceOrientation:self.interfaceOrientation duration:0];
[self didRotateFromInterfaceOrientation:self.interfaceOrientation];
}
有点糟透了我必须这样做,但它确实有效,现在我不太担心因使用太多内存而被iOS杀死。
答案 1 :(得分:1)
我认为iOS 5可能会解决此问题。
对于iOS 4.3,我在另一个修复方面运气不错。从nib加载后:
[parent.view addSubview:nibView];
nibView.frame = parent.view.frame;
[nibView setNeedsLayout];
如果有效,你可以放弃unloadedByMemoryWarning
逻辑,因为每次加载都是安全的。得到了提示&代码(基本上)来自here。