Используется только загрузка данных UIImage - PullRequest
0 голосов
/ 30 января 2012

У меня в приложении 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?

1 Ответ

1 голос
/ 30 января 2012

Я почти уверен, что вы действительно хотите CATiledLayer, где вы можете указать его на набор изображений и автоматически выбрать нужное.

Вы можете просто добавить CATiledLayer на любой UIView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...