Оптимизация UIScrollview для подкачки - PullRequest
0 голосов
/ 23 февраля 2011

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

BOOL isScrollingDown = verticalScrollView.contentOffset.y > _previousContentOffsetY;

_previousContentOffsetY = verticalScrollView.contentOffset.y;

CGFloat pageHeight = verticalScrollView.frame.size.height;

int scrollingToPageNum = isScrollingDown ? (ceil((verticalScrollView.contentOffset.y - pageHeight) / pageHeight) + 1) : (floor((verticalScrollView.contentOffset.y - pageHeight) / pageHeight) + 1);
int page = floor((verticalScrollView.contentOffset.y - pageHeight / 2) / pageHeight) + 1;

[self loadPage:(page-1)];
[self loadPage:(page)];
[self loadPage:(page+1)];

/* Unloading the pages not seen in the view is done here*/
if (!(isScrollingDown) && scrollingToPageNum >1) {
    [self unloadPages:page-2];
}else {
    [self unloadPages:page+2];
}

Техника отложенной загрузки работает отлично, и из-за этого уменьшается объем используемой памяти. Однако пользовательский интерфейс слишком медленный. Также я хочу узнать, как обновить пользовательский интерфейс из другого потока, который загружает изображение с URL.

ТИА, Praveen

1 Ответ

0 голосов
/ 23 февраля 2011

Я не уверен на 100% в этом, так что перепроверьте.Вы должны обновить экран в главном потоке приложения, если вы используете классы Apple, такие как UIScrollView.Тем не менее, вам не нужно загружать изображения в той же теме.Прочитайте руководство Apple по параллелизму и посмотрите на пример программы, чтобы понять, как это сделать.

Кроме того, для рисования изображений, которые больше, чем нужно, требуется больше времени.Не рисуйте изображения с большим количеством пикселей, чем на экране.Для сверхбольших изображений вырежьте их друг от друга, чтобы вы могли рисовать только разделы одновременно, у Apple есть пример кода для этого.При обнаружении времени простоя нарисуйте несколько изображений сразу вокруг того, что отображается пользователю.Таким образом, пользователь не видит символ загрузки при прокрутке вокруг представления.С каждым выпуском iOS 3GS может справиться лишь с тем, что телефон становился все медленнее и медленнее, потому что он делает больше вещей, которые вы должны управлять скоростью и точностью на этих телефонах, рисуя изображение с низкой точностью, если пользователь быстро перемещаетсязатем рисуем изображение с более высокой точностью, если пользователь перестает двигаться.

Я обновлю это позже, если у меня будет время с некоторыми ссылками, но эти советы выше - то, что сработало для меня.

...