Почему я не могу обновить содержимое моего UIScrollView с помощью NSOperationQueue / NSOperationInvocation? - PullRequest
0 голосов
/ 09 декабря 2011

Мне кажется, я помню кое-что об обновлении пользовательского интерфейса в главном потоке, может быть объяснением, однако моя проблема в том, что у меня есть UIScrollView с 1000+ изображениями в нем, и я написал процедуру, которая быстро переключит видимые изображения в представлении, чтобы показать их реальное изображение, и когда они не видны, они переключаются на изображение-заполнитель. Все изображения вне экрана имеют одинаковую заполнитель, что значительно снижает загрузку памяти.

Я написал два метода, которые включают / выключают следующие несколько плиток вида и запускаются, если вы прокручивали достаточно в определенном направлении. Прокрутка обнаруживается с помощью метода обратного вызова UIScrollViewDelegate scrollViewDidScroll.

Эта стратегия работает отлично, но прокрутка прокрутки немного нервная на медленных устройствах (iPad 1). Я хотел повысить производительность, поэтому подумал, что могу изменить код так, чтобы два метода, которые обновляют содержимое scrollview, были NSOperationInvocation, добавленные в NSOperationQueue.

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

Почему это не работает?

Код для вызова NSOperationInvation:

    ImageThumbView *thumb = [boardThumbsArray objectAtIndex:lowestLoadedThumbTag - i];
    [loadedThumbsArray addObject:thumb];
    [thumb showThumbImage];

ImageThumbView является подклассом UIButton

    - (void)showThumbImage {

if (thumbImagePath != nil) {
    thumbImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL fileURLWithPath:thumbImagePath]]];
} else {
    NSLog(@"%@", @"Cannot show thumb image: thumbImagePath is nil");
}

[self setBackgroundImage:thumbImage forState:UIControlStateNormal];
[self setNeedsDisplay];

}

1 Ответ

0 голосов
/ 17 декабря 2011

Посмотрите на пример кода Apple "PhotoScroller". Вы не должны иметь 1000 просмотров как подпредставления scrollview. Утилизируйте те, которые больше не видны.

Также посмотрите видео WWDC 2010 "Проектирование приложений с помощью прокрутки". Это объясняет пример кода фотокроллера

Спасибо

...