我的应用程序中捆绑了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加载它一样快?
答案 0 :(得分:1)
我非常确定你真正想要的是CATiledLayer
,你可以将它指向一组图像并让它自动提取所需的内容。
您只需向CATiledLayer
添加UIView
。