UIView занимает много времени для отображения - PullRequest
0 голосов
/ 09 сентября 2011

Я отображаю множество UIViews в корневом UIView.(Я знаю, что это не очень хорошая практика).Подвиды включают в себя UIImageViews, UILabels и пользовательские UIViews, использующие Quartz для рисования некоторых линий.После генерации всех представлений я добавляю корневой вид в UISCrollView для их отображения.Проблема в том, что все изображения отображаются мгновенно, но текст в метках и линии, которые я рисую в методе drawRect, будут отображаться долго.Если я увеличу масштаб прокрутки, все они будут отображаться мгновенно.В чем проблема?Спасибо.

Ответы [ 2 ]

4 голосов
/ 09 сентября 2011

Трудно сказать, не видя ваш код, но, похоже, что-то не так с вашим приложением. iOS может обрабатывать большое количество подпредставлений без удушья или заикания. И все вещи UIView являются однопоточными - фактически, насколько мне известно, весь рендеринг происходит в одном цикле выполнения (представления с поддержкой CATiledLayer являются единственным исключением, о котором я могу думать). Поэтому, даже если рендеринг затормозился, я бы ожидал долгую паузу, а затем все сразу отобразилось. Не частичный результат, который вы описываете.

Добавляете ли вы представления программно или из пера? Все ли в одном и том же перце, или некоторые вещи в отдельном пере? Как выглядит ваша UIViewController ситуация?

Попробуйте зайти в журнал, чтобы показать вещи, которые отображаются позже. Их действительно вызывают с опозданием, или же им звонят со всем остальным, и они скрыты чем-то другим? Попробуйте запустить новое, чистое приложение, в котором ничего нет, и добавьте туда каждое из ваших подпредставлений, чтобы увидеть, как они работают изолированно? Обратите особое внимание на то, где вы используете вызовы GCD, многопоточность или preform:AfterDelay:.

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

0 голосов
/ 11 января 2019

У меня была похожая проблема, когда мой ярлык не появлялся более 10 секунд, хотя вид, содержащий ярлык, появлялся сразу.Причина была в том, что я делал это в завершение при успешном выполнении асинхронного вызова API.Я не слишком знаком с тем, как работает пользовательский интерфейс iOS, но по какой-то причине вы можете вносить изменения только в основной поток.

Размещение кода, связанного с пользовательским интерфейсом / просмотром, в пределах:

DispatchQueue.main.async {
    //View related code
}

немедленно решил мою проблему.

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