Экран загрузки для просмотра данных - PullRequest
2 голосов
/ 16 марта 2012

Я впервые работаю с основными данными, а мое приложение обрабатывает много данных (по крайней мере, 1000+ управляемых объектов), поэтому загрузка определенных представлений занимает некоторое время.

пример: iиметь представление, которое в основном содержит табличное представление, которое содержит информацию о конкретных объектах основных данных.представление будет содержать от 10 до 100+ элементов (сгруппированных), и у меня есть время загрузки до пары секунд.в принципе это не проблема, но я подозреваю, что пользователи раздражаются, когда представление загружается без какой-либо информации до тех пор, пока оно не отобразится.

Я загружаю свои данные в viewWillAppear, потому что их нужно каждый раз перезагружатьиз-за изменений.

вопрос: как я могу отобразить экран загрузки (индикатор прогресса) во время загрузки вида?это не должно быть причудливо, просто может быть одноцветный экран с одним из стандартных индикаторов прогресса?

какие-либо входы?

Редактировать: Мне удалось сбросить время загрузкиот 3 секунд до нескольких миллисекунд, так что мне это не нужно в этом конкретном проекте, но в любом случае я думаю, что этот вопрос стоит задать =), так что я все еще очень заинтересован в идеях =)

я уже читал этот урок: Использование AlertView для индикации прогресса , но я не смог адаптировать его в небольшом тестовом проекте для использования во время переходов вида.

Себастьян

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

Вы можете установить любой вид заполнителя в viewWillAppear, а затем создать фоновый блок для загрузки содержимого.После загрузки содержимого вы обновляете экран, чтобы показать их:

- (void)viewWillAppear {
    [super viewWillAppear];

    [self loadPlaceholderSubview];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        [self loadData];

        dispatch_async(dispatch_get_main_queue(), ^{
            if ([self isStillNeeded])
                [self updateSubviews];
        });
    });
}   

Несколько замечаний:

  • [self isStillNeeded] необходимо, поскольку данные загружаютсяв фоновом режиме, и представление может больше не отображаться на экране, когда загрузка завершена (например, пользователь мог уйти).Как это проверить, зависит от того, как именно работает ваше приложение.В некоторых случаях это может быть так же просто, как проверить, имеет ли представление по-прежнему superview или window.

  • Убедитесь, что любое обновление интерфейса происходит в главном потоке (следовательно,отправьте на dispatch_get_main_queue(), как того требует ОС.

0 голосов
/ 19 марта 2012

Это интересный вопрос для меня, так как я сейчас занимаюсь схожими проблемами. Мне также нравится учебник, который вы цитируете. Вот предварительный ответ:

Учебник AlertView добавляет UIActivityIndicatorView в качестве подпредставления к представлению предупреждений. Но addSubview: - это метод родительского класса, UIView, то есть вы можете добавить его в любое представление. Таким образом, вы можете добавить его к любому представлению, которое в данный момент отображается при обновлении tableView, или я полагаю, что вы можете вставить дополнительное представление за tableView только для этой цели.

Что касается сопроводительного пояснительного текста, если представлением хоста индикатора активности является текстовое представление, просто назначьте текст в качестве строки текстового представления. Если вы хотите больше контроля над размещением и стилем текста, исследуйте, используя NSAttributedString с CATextLayer, который вы применяете, используя метод addSublayer: представления. (Если вы воспользуетесь последним предложением, вам нужно будет импортировать инфраструктуру QuartzCore для слоя и CoreText для приписанной строки.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...