Я действительно делал это раньше.С большими изображениями вам нужно быть осторожным с памятью.Первоначально я загрузил все свои изображения в NSArray, но у меня появилось предупреждение о сбое памяти и сбоях.
В моей реализации используется UIScrollView с подкачкой страниц.Я должен массивы, один содержит все имена изображений, а другой является изменяемым и содержит только несколько UIImageViews.Я записываю текущую «страницу», на которой включен вид прокрутки, и когда я сажусь на изображение, я проверяю, что изменяемый массив содержит это изображение и два изображения по обе стороны от него (и удаляю любые другие изображения из массива).
Проблема с этой реализацией заключается в том, что вам постоянно приходится читать образы с диска, что в основном потоке будет медленным.Ооочень, когда я первоначально создаю UIImageViews, я добавляю UIActivityIndicator к ним.Затем я передаю свой массив UIImageViews методу в фоновом режиме, который фактически загружает UIImage, а затем заставляет соответствующий UIImageView установить изображение в основном потоке следующим образом:
// called before you try to load an image in a background thread
[imageView addObserver:self forKeyPath:@"image" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
// called in the background thread after you load the image from disk
[imageView performSelectorOnMainThread:@selector(setImage:) withObject:fullImage waitUntilDone:NO];`
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
UIImageView *imageView = (UIImageView *)object;
[[imageView viewWithTag:1] removeFromSuperview]; // this is the activity indicator
[imageView removeObserver:self forKeyPath:@"image"];
}