仅加载使用的UIImage数据

时间:2012-01-30 03:14:56

标签: objective-c ios uiimage

我的应用程序中捆绑了400x300的400个图案图像。我想制作某种工厂方法来获取该图像的一部分并将它们加载到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 个答案:

答案 0 :(得分:1)

我非常确定你真正想要的是CATiledLayer,你可以将它指向一组图像并让它自动提取所需的内容。

您只需向CATiledLayer添加UIView