当我在基于导航的iPhone App中收到内存警告时,背景图像会在先前分配的导航控制器中消失。
背景图像被设置为UIView的背景属性。然后将此视图添加到App委托的主窗口中:
UIView *backgroundView = [[UIView alloc] initWithFrame: window.frame];
backgroundView.backgroundColor = [UIColor colorWithPatternImage:[[Utilities sharedManager] getImageWithName:@“Hintergrund2”]]; backgroundView.tag = 56789; [window addSubview:backgroundView]; [backgroundView release];
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
收到内存警告消息并按下导航控制器的后退按钮后,上一个导航控制器显示正常的Apple灰色背景。我必须导航回我的主屏幕并向前导航以“重置”背景图像。
谁能告诉我为什么背景会消失?这不是因为图像,当我将背景设置为标准的UIColor(如blackColor)时,背景(颜色)也会消失。
提前感谢您的帮助!
问候
菲尔
答案 0 :(得分:2)
在内存不足的情况下,未定义操作系统直接添加到主UIWindow
的内容。
也许考虑使用简单的UIViewController
作为背景?当内存不足时,你至少会得到回调。
答案 1 :(得分:0)
首先,您应该将控制器添加到窗口中,如下所示:
window.rootViewController = navigationController;
我没有测试过这个,但也许你可以直接设置窗口的背景颜色:
window.backgroundColor = [UIColor colorWithPatternImage:[[Utilities sharedManager] getImageWithName:@"Hintergrund2"]];
如果这不起作用,您将需要一种更好的方法来在低内存情况下重新创建视图状态。最常用的方法是在每个xib中定义背景,然后重新加载。或者,您可以通过查看backgroundView
是否具有超级视图来捕获低内存警告并根据需要重新创建。
答案 2 :(得分:0)
确保您在视图控制器的self.view.backgroundColor = [UIColor clearColor];
中设置了调用- (void) viewDidLoad
,否则将无法显示窗口的图像。
- (void) viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor clearColor];
...
}
我的问题是我在初始化时设置了视图backgroundColor
MyTableViewController *myTVC =
[[MyTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
myTVC.view.backgroundColor = [UIColor clearColor];
而不是- (void) viewDidLoad
。
在这种情况下,UITableViewController
视图的背景颜色是在最初创建后设置的。但是,在内存不足警告之后,未显示的UIViewController
会调用- (void) viewDidUnload
。这剥夺了他们的观点。就在再次显示UIViewController
之前,- (void) viewDidLoad
被调用并创建了一个新视图,但视图的背景颜色设置为默认值,不明确。