Обновление UIView занимает слишком много времени - PullRequest
1 голос
/ 04 марта 2011

В приложении для iPad у меня есть куча UIImageViews внутри большего UIView. Каждый UIImageView содержит миниатюру, которая создается в отдельном потоке (чтобы не заморозить приложение). После того, как миниатюра была успешно сгенерирована, я вызываю setNeedsDisplay в главном потоке, однако он не обновляет UIImageViews по мере появления больших пальцев (я вижу их в журнале), а занимает около 5 секунд, а затем отображает все их сразу.

Вот что я делаю, когда миниатюра была создана в отдельной теме:

[self performSelectorOnMainThread:@selector(setNeedsDisplay) 
                       withObject:nil 
                    waitUntilDone:NO];

есть идеи?

Ответы [ 3 ]

0 голосов
/ 04 марта 2011

Чем занимается ваша основная тема? Если ваше приложение ждет, пока все миниатюры не станут доступны, перед перерисовкой, похоже, что вы случайно блокируете основной поток, пока ваша очередь миниатюрных файлов не опустеет. Как вы настраиваете темы?

0 голосов
/ 04 марта 2011

Я бы использовал NSNotification. Отправьте уведомление из вашей ветки, загружая изображения, когда изображение будет готово. Ваш контроллер представления может наблюдать эти уведомления и обновлять представление по мере их поступления.

0 голосов
/ 04 марта 2011

Проблема в том, что вы не можете сказать какао, что оно должно перерисовываться "сейчас". С setNeedsDisplay вы можете в одиночку заказать перерисовку, потому что рисование - довольно дорогой процесс.

setNeedsDisplay

Вы можете использовать этот метод или setNeedsDisplayInRect: уведомить система, в которой нуждается ваше мнение быть перерисованным. Этот метод делает записка о запросе и возврате немедленно. Вид на самом деле не перерисовывать до следующего цикла рисования, в этот момент все недействительные взгляды обновляются.

Mybe это лучшее и более эффективное решение для ожидания всех сгенерированных ползунков?!

...