iPhone App - фон исчезает после предупреждения памяти - PullRequest
4 голосов
/ 12 сентября 2010

Когда я получаю предупреждение о памяти в своем приложении для iPhone на основе навигации, фоновое изображение исчезает в ранее выделенных навигационных контроллерах.

Фоновое изображение устанавливается как свойство фона UIView.Затем это представление добавляется в главное окно делегата приложения:

UIView *backgroundView = [[UIView alloc] initWithFrame: window.frame];

backgroundView.backgroundColor = [UIColor colorWithPatternImage: [[Utilities sharedManager] getImageWithName: @ "Hintergrund2"]];backgroundView.tag = 56789;[окно addSubview: backgroundView];[backgroundView release];

[window addSubview:[navigationController view]];

[window makeKeyAndVisible];

После того, как я получил предупреждающее сообщение о памяти и нажал кнопку возврата контроллера навигации, предыдущий контроллер навигации показывает обычный серый фон Apple.Я должен вернуться к своему домашнему экрану и перейти к «сбросу» фонового изображения.

Может кто-нибудь сказать мне, почему фон исчезает?Это не из-за изображения, когда я устанавливаю фон для стандартного UIColor, такого как blackColor, фон (цвет) также исчезает.

Заранее благодарю за помощь!

привет

Фил

Ответы [ 3 ]

2 голосов
/ 12 сентября 2010

Не определено, что делает ОС с вещами, добавляемыми непосредственно к основному UIWindow в случае нехватки памяти.

Возможно, рассмотрите возможность использования простого UIViewController для фона? Тогда вы будете по крайней мере получать обратные вызовы, когда ситуация с нехваткой памяти.

0 голосов
/ 18 июня 2011

Убедитесь, что вы устанавливаете вызов 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 и создан новый вид, но цвет фона вида был установлен по умолчанию, что не ясно.

0 голосов
/ 13 ноября 2010

Во-первых, вы, вероятно, должны добавить свой контроллер в окно следующим образом:

window.rootViewController = navigationController;

Я не проверял это, но, возможно, вы можете установить цвет фона окна напрямую:

window.backgroundColor = [UIColor colorWithPatternImage:[[Utilities sharedManager] getImageWithName:@"Hintergrund2"]];

Если это не сработает, вам понадобится лучший способ воссоздать состояние просмотра в ситуациях нехватки памяти. Самый стандартный способ сделать это - определить фон в каждом xib, который будет перезагружен. В качестве альтернативы, вы можете перехватить предупреждение о нехватке памяти и воссоздать при необходимости, если ваш backgroundView имеет суперпредставление.

...