У меня есть приложение IOS, предназначенное для ipad. На одной странице я показываю отчет пользователю, и для отчета требуется 5000 UILabels, которые будут отображаться на экране внутри UIScrollView. Это приводит к сбою приложения из-за нехватки памяти. Я знаю, что UITableView имеет функциональность для загрузки контента по требованию. Как сделать просмотр прокрутки рендерингом только определенного контента, и по мере прокрутки удаляется содержимое, которое становится невидимым, и добавляет контент, который должен быть видимым?Как сделать загрузку данных UIScrollView при прокрутке
ответ
Есть ли способ перенастроить его, чтобы использовать представление таблицы с настраиваемыми строками, возможно, строки, состоящие из нескольких меток? Эта модель поддерживает загрузку по требованию и повторное использование ресурсов очень естественным образом ...
Возможно, вы можете быть более конкретным на вашем экране?
Нет. Использование UIScrollView является обязательным требованием. – neo
Вы должны повторно использовать цикл (например, повторно использовать), чтобы метки, подобные виду таблицы, перерабатывали свои ячейки таблицы. Это иногда называют «черепичными» подзонами. Плитка позволяет отображать больше, чем вписывается в память.
Я рекомендую посмотреть сеанс WWDC 2012 года 104. Учебное пособие этой сессии создает приложение для фото, которое отображает изображения в UIScrollView. Хотя приложение «Фотография» прокручивает страницы контента, а не сетку элементов, я думаю, что видео может иметь отношение к вашему приложению.
Вот очень краткий обзор руководства применительно к вашему конкретному случаю:
(1.) объявить Иварс, отслеживающие этикеток:
NSMutableSet *recycledLabels;
NSMutableSet *visibleLabels;
(2.) реализовать метод, извлекает многоразовую этикетку:
- (UILabel *)dequeueRecycledLabel;
(3.) реализовать способ, который делает черепицу:
- (void)tileLabels; // this will add/remove labels from the scroll view
(4.) установить делегата на ваш взгляд скроллинга и вызвать tileLabels в scrollViewDidScroll: метод делегата
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self tileLabels];
}
видео WWDC поможет вам заполнить в деталях, которые я думаю, применимы к вашему делу , Тем не менее, вам нужно будет сделать много импровизации, чтобы заставить его работать для вашего конкретного случая. Это может быть нелегко; но его выполнимость.
В конце видео обсуждается черепица с использованием CATileLayer. Я буду честен, я не понял эту часть. Но я не думаю, что это применимо в вашем случае, потому что вы не показываете большие изображения.
Я не смог найти видео. Не могли бы вы предоставить url? – neo
Я, наконец, реализовал динамическую загрузку контента. Реализованный метод: scrollViewDidScroll. Внутри этого метода я определил направление прокрутки по следующей
bool isUp = (currentOffset.y > lastScrollOffset);
Затем я определил видимый прямоугольник содержимого с помощью следующего.
CGRect visibleContentRect;
visibleContentRect.origin = scrollView.contentOffset;
visibleContentRect.size = scrollView.bounds.size;
Тогда я был массив элементов View, и каждый знал свое место в представлении прокрутки из-за их рамки быть установлены. Короче говоря, каждый раз, когда прокручивался свиток, я определял представления, чей кадр пересекался или содержался в видимом кадре контента.Я добавил эти представления в список прокрутки. Я также определил те, которые исчезли и удалили их из прокрутки, и я также установил эти взгляды на ноль и воссоздал их. Как только [scrollView addSubview: view] вызывается метод, тогда просмотр получает больше места в памяти, потому что он становится видимым. [view removeFromSuperView] способ не освобождает это пространство. Вот почему установка представления на нуль и повторное создание необходимо.
- 1. Проблема UIScrollView при прокрутке
- 2. UIScrollView прыгает при прокрутке
- 3. Воспроизведение звука при прокрутке UIScrollView
- 4. Остановите анимацию UIScrollView при прокрутке другого UIScrollView
- 5. Предварительный просмотр UIScrollView при прокрутке
- 6. Утечка памяти при прокрутке UIScrollView
- 7. Как найти позицию uiscrollview при прокрутке
- 8. fade UITextView при прокрутке uiscrollview
- 9. Как вызвать действие при прокрутке в UIScrollView?
- 10. Как изменить фон изображения при прокрутке uiscrollview?
- 11. Как увеличить масштаб при прокрутке UIScrollView
- 12. Как предотвратить прокрутку uiscrollview при прокрутке ее под-uiscrollview?
- 13. Как реализовать загрузку при прокрутке JList?
- 14. loadHTMLString не будет срабатывать при прокрутке UIScrollView
- 15. Отключить клавиатуру при прокрутке в UIScrollView
- 16. Установка ContentOffset в виде UIScrollView при прокрутке
- 17. UIScrollView - содержание гаснет неизбежно при прокрутке
- 18. UIScrollview вызывает супервизор layoutSubviews при прокрутке?
- 19. Спрос на загрузку UIScrollView
- 20. UIScrollView медленная частота кадров при прокрутке, почему?
- 21. UIScrollView - обнаружить второе касание при прокрутке
- 22. UIScrollView привязка к позиции при прокрутке
- 23. UIScrollView не прокрутке
- 24. Время, затраченное на загрузку uiscrollview
- 25. Как заставить UIScrollView блокировать 2 из 3 UIView при прокрутке?
- 26. Как сделать загрузку данных во всех элементах?
- 27. Android - Как сделать загрузку при первом запуске
- 28. Как запустить анимацию при прокрутке UIScrollView до maxY? SWIFT
- 29. Как я могу вызвать метод при прокрутке-событиях в UIScrollView?
- 30. Как предотвратить загрузку изображений несколько раз при быстрой прокрутке сетки?
То, что вы запросили, является именно точкой использования UITableView или UICollectionView. Вы должны использовать их вместо UIScrollView, и вы можете обрабатывать любое количество элементов данных. –
У меня есть требование использовать UIScrollView. В противном случае я не стал бы задавать этот вопрос. – neo
было бы полезно понять, почему вы должны использовать UIScrollView. вы собираетесь написать много настраиваемой логики, чтобы получить ту же функциональность, которая уже встроена в коллекции. –