У меня в приложении 400 шаблонных изображений размером 400x300. Я хотел бы сделать какой-то заводской метод, чтобы взять часть этого изображения и загрузить их в UIImageViews. У меня был некоторый успех с использованием режима контента и обрезкой до границ, но когда я загружаю тонну из них в представление, загрузка представления может занять до 5 секунд. Вот пример моего текущего метода.
UIImageView *tinyImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed@"400x300testImage.png"];
[tinyImageView setFrame:CGRectMake(0, 0, 10, 200)];
[tinyImageView setContentMode:UIViewContentModeTopLeft];
[tinyImageView setClipsToBounds:YES];
[self.tinyImagesView addSubview:tinyImageView];
Я читал файлы классов ImageIO, и я думаю, что мой ответ там, но мне трудно собрать работающий код. В другом вопросе stackoverflow я наткнулся на этот код
CFDictionaryRef options = (__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:
(id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform,
(id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageIfAbsent,
(id)[NSNumber numberWithFloat:200.0f], (id)kCGImageSourceThumbnailMaxPixelSize,
nil];
CGImageRef imgRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options);
UIImage *scaled = [UIImage imageWithCGImage:imgRef];
CGImageRelease(imgRef);
CFRelease(imageSource);
return scaled;
Время загрузки аналогично загрузке полных изображений и отсечения.
Можно ли прочитать только полосу 10x200 файла изображения и загрузить ее в UIImageView, который так же быстр, как создание 10x200 png и загрузка его с использованием imageNamed?