Загрузка приложения и экран-заставка

Мое приложение загружает довольно много данных, что занимает около нескольких секунд. Мой экран-заставка отображается, а затем исчезает, а затем на несколько секунд появляется белый пустой экран перед загрузкой первого представления. Есть ли способ сохранить отображение заставки? Можно ли создать представление в AppDelegate и держать его отображаемым до тех пор, пока загрузка всех данных не будет завершена и представление не будет загружено?


person darksky    schedule 11.08.2011    source источник
comment
На мой взгляд, вы должны загружать эти данные в фоновом режиме, если это возможно, и позволить пользовательскому интерфейсу реагировать.   -  person dasdom    schedule 11.08.2011
comment
@Nayefc: +1 за хороший вопрос :)   -  person Parth Bhatt    schedule 11.08.2011
comment
@dasdom Да, я могу это сделать - используя многопоточность и GCD, но в пользовательском интерфейсе нечего отображать без данных. Кроме того, это происходит только при первоначальном запуске приложения, поэтому я, вероятно, покажу хороший индикатор активности с некоторым фоном.   -  person darksky    schedule 11.08.2011


Ответы (4)


Используйте MBProgressHUD. Здесь вы можете получить весь исходный код.

https://github.com/jdg/MBProgressHUD

Надеюсь это поможет.

Это представление загрузки, которое является индикатором активности.

РЕДАКТИРОВАТЬ:

Вы можете добавить свой фоновый вид в окно, пока ваши данные загружаются в фоновом режиме, используя

[window addSubview:<backgroundView>.view];

Затем, как только данные будут загружены, вы можете удалить их из окна и добавить свой главный контроллер представления в окно.

[<backgroundView>.view removeFromSuperView];
[window addSubview:<mainView>.view];

Надеюсь, это тебе поможет.

person Parth Bhatt    schedule 11.08.2011
comment
Да, я уже использовал MBProgressHUD. Должен ли я просто отображать фоновое изображение за индикатором активности? Итак, я бы создал представление с изображением в AppDelegate, приклеил ProgressHUD сверху и удалил его, когда представление вот-вот загрузится. Это хорошее решение? - person darksky; 11.08.2011
comment
Нет, это не обязательно, но минимизируйте время ожидания, выполняя процесс выборки данных асинхронно. Надеюсь, это поможет вам :) - person Parth Bhatt; 11.08.2011
comment
Спасибо за ваш ответ. Да, я загружаю данные асинхронно. Но progressHUD выглядит довольно некрасиво на белом фоне в течение нескольких секунд, поэтому я хочу приклеить какой-нибудь красивый фон на несколько секунд. Что-нибудь простое. - person darksky; 11.08.2011
comment
Также можно отображать фон, вы можете отобразить красивый фон, если хотите. - person Parth Bhatt; 11.08.2011
comment
Да, это было бы хорошо. Вы можете добавить представление в appdelegate прямо в окно в качестве подпредставления к окну, и после загрузки данных вы можете удалить представление с фоном из окна, используя removeFromSuperview, а затем вы можете добавить свой viewController с вашими данными в окно в качестве его подпредставления. Так это выглядело бы красиво и новаторски. Надеюсь, это поможет вам :) - person Parth Bhatt; 11.08.2011
comment
Спасибо :) Я отмечу вас как правильный ответ, как только смогу, примерно через 3 минуты. - person darksky; 11.08.2011
comment
Проверьте раздел ИЗМЕНИТЬ моего ответа. - person Parth Bhatt; 11.08.2011
comment
@Nayefc: Привет, Nayefc Спасибо, что вам понравился мой ответ. Если вы получили ответ, отметьте его как правильный. - person Parth Bhatt; 11.08.2011

Да, вы можете отобразить представление с экраном-заставкой (и, возможно, индикатором активности, просто не забудьте загрузить свои данные в отдельном потоке, иначе он не будет вращаться), а затем переключиться на правильный вид, когда загрузка будет завершена.

person andreamazz    schedule 11.08.2011

Белое представление, которое вы видите перед фактическим представлением, - это mainWindow. Просто установите заставку в качестве фонового изображения вашего окна в MainWindow.xib, и все готово. При желании вы также можете добавить счетчик, который всегда вращается в верхней части окна, чтобы при загрузке приложения вы сначала видели экран-заставку, затем экран-заставку со счетчиком, а затем отображалось ваше представление.

person JonasG    schedule 11.08.2011

Я загружаю ImageView с изображением по умолчанию в viewDidLoad и скрываю его, если вам предшествуют данные.

    UIImage* imageDefault = [UIImage imageNamed:@"[email protected]"];
    CGRect frame;
    frame.origin.x = 0;
    frame.origin.y = -20;
    frame.size.width = 320;
    frame.size.height = 480;

    splash = [[[UIImageView alloc] initWithFrame:frame] autorelease];
    [splash setImage:imageDefault];
    [self.view addSubview:splash];
   .
   .


    splash.hidden=YES;
person Malte Onken    schedule 11.08.2011