ленивая загрузка изображений в UIScrollView - PullRequest
0 голосов
/ 03 мая 2010

У меня есть приложение, требующее прокрутки множества изображений.

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

Проблема в том, что если я прокручиваю слишком быстро, появляются «черные изображения» (изображения, которые не удалось загрузить).

это код отложенной загрузки: int currentImageToLoad = [self calculateWhichImageShowing] + imageBufferZone; [(UIView*)[[theScrollView subviews] objectAtIndex:0]removeFromSuperview]; PictureObject *pic = (PictureObject *)[imageList objectAtIndex:currentImageToLoad];</p> <pre><code> MyImageView *iv = [[MyImageView alloc] initWithFrame:CGRectMake(currentImageToLoad * 320.0f, 20.0f, 320.0f, 460)]; NSData *imageData = [NSData dataWithContentsOfFile:[pic imageName]]; [iv setupView:[UIImage imageWithData: imageData] :[pic imageDescription]]; [theScrollView insertSubview:iv atIndex:5]; [iv release];

это код внутри scrollViewWillBeginDecelerating:

</p> <pre><code>[NSThread detachNewThreadSelector:@selector(lazyLoadImages) toTarget:self withObject:nil];

1 Ответ

2 голосов
/ 03 мая 2010
  1. Почему код в методе willbegin замедляется? Было бы лучше иметь его в методе scrolviewdidscroll, чтобы загрузка могла начаться как можно скорее.

  2. Вы не должны изменять какие-либо виды из отдельного потока, так как чертеж вида не является потокобезопасным

  3. Действительно ли изображения хранятся в виде данных в файле или они являются файлами изображений? Если файлы изображений, используйте [UIImage imageNamed:], чтобы загрузить их, поскольку вы выполняете 2 преобразования в данный момент. Если они представляют собой данные, я предлагаю вам создать UIImages для большинства из них в отдельном потоке при первом показе scollview, чтобы их изображения были готовы, когда их нужно добавить в представление scrollview.

...