Как сделать ui отзывчивым все время и делать обновление фона?

Я создаю приложение, которое отображает 8 эскизов на страницу и может иметь n страниц. Каждый из этих миниатюр является UIViews и добавляется в UIScrollView. Однако я использовал пейджинг, используя образец кода Apple.

Задача:

  1. Каждый эскиз (UIView) занимает 150 миллисекунд, которые нужно создать и добавить в список прокрутки
  2. Следовательно, для 3 страниц требуется огромное количество времени, которое нужно создать и добавить в список прокрутки пользовательского интерфейса.
  3. На данный момент вид прокрутки не очень отчетливый, и он очень рывкий и дает плохой пользовательский интерфейс
  4. Как я могу создать эскизы и добавить их в UIScrollview, не затрагивая чувствительность к касанию? Я хочу, чтобы они запускались независимо от основного streamа, который можно использовать для обработки событий касания (я полагаю).

Также я хотел бы упомянуть, что когда создается миниатюра, я запускаю загрузку Async изображения, и метод делегата вызывается, когда загрузка завершена.

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

ТИА,

Praveen S

Grand Central Dispatch прост в использовании для загрузки фона. Но GCD только для iOS4. Если вам нужно поддерживать iOS3, то полезно использовать функцииSelectorInBackground / performSelectorOnMainThread или NSOperationQueue.

И, будьте осторожны, почти classы UIKit не являются streamобезопасными, за исключением рисования в графическом контексте. Например, UIScrollView не является streamобезопасным, UIImage imageNamed: не является streamобезопасным, но UIImage imageWithContentsOfFile: поточно-безопасный.

dispatch_queue_t mainQueue = dispatch_get_main_queue(); dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(concurrentQueue, ^{ dispatch_apply([thumbnails count], concurrentQueue, ^(size_t index) { Thumbnail *thumbnail = [thumbnails objectAtIndex:index]; thumbnail.image = [UIImage imageWithContentsOfFile:thumbnail.url]; dispatch_sync(mainQueue, ^{ /* update UIScrollView using thumbnail. It is safe because this block is on main thread. */ }); } /* dispatch_apply waits until all blocks are done */ dispatch_async(mainQueue, ^{ /* do for all done. */ }); } 

У меня была аналогичная проблема.
То, что я сделал, было в экземпляре, я сохранил только 3 страницы в памяти и очистил оставшиеся все.
Если предполагается наличие 3 экранов s1, s2, s3. И пользователь просматривает s2. Всякий раз, когда он прокручивается до s3, я удаляю s1 и загружаю новую страницу s4.
Чтобы пользователи имели лучший опыт. И меньше памяти будет занято.

Независимо от того, используете ли вы просмотр или отдельный ViewController для каждой «страницы» или элемента Scrollview, может возникнуть резкость или низкая производительность, изменив расположение вашего кода.

В частности, код примера apple для scrollview с pagecontrol имеет что-то вроде этого:

 [self loadScrollViewWithPage:page - 1]; [self loadScrollViewWithPage:page]; [self loadScrollViewWithPage:page + 1]; 

Однако этот код появляется в своем примере в методе «scrollViewDidScroll». Он пытается сделать многократный тяжелый подъем одновременно и прокруткой, и загрузкой. Даже если ваши изображения являются локальными, это неприятно.

Если вы переместите этот и связанный с ним код, включая ссылку на текущую страницу, на «scrollViewDideEndDecelerating», то раздражение интерфейса будет устранено, потому что загрузка происходит, когда scrollview больше не перемещается.

  • программный доступ к кнопкам громкости iPhone
  • К ARC или не к ARC? Каковы плюсы и минусы?
  • Одновременные распознаватели жестов в Iphone SDK
  • UIScrollView - показывает полосу прокрутки
  • Что делает @synthesize window = _window?
  • Автоматически запускать локальные уведомления ежедневно в динамическое время, заданное в массивах. objective ios
  • Как я могу программно проверить, присутствует ли клавиатура в приложении iOS?
  • IPhone / IPad: Как получить ширину экрана программно?
  • Пользовательский пузырь выноски MKPinAnnotation похож на пузырь по умолчанию
  • Ошибка модуля сборки iOS8 для Facebook для FBSDKCoreKit
  • Сравните два массива с одинаковым значением, но с другим порядком
  • Давайте будем гением компьютера.