我的应用程序中捆绑了 400 个 400x300 的图案图像。我想制作某种工厂方法来获取该图像的一部分并将它们加载到 UIImageViews 中。我在使用内容模式和剪切到边界方面取得了一些成功,但是当我将大量这些内容加载到 View 中时,加载 View 可能需要 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 strip 并将其加载到 UIImageView 中,其速度与创建 10x200 png 并使用 imageNamed 加载它一样快?
最佳答案
我很确定您真正想要的是一个CATiledLayer
,您可以将其指向一组图像并让它自动提取所需的内容。
您只需将 CATiledLayer
添加到任何 UIView
即可。
关于objective-c - 只加载使用的UIImage数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9058933/