理想情况下,你永远不会在内存中保留大量 UIImage 对象的大图像。它们会给你内存警告。如果图像是本地文件,您可以做一件事,使用后台线程将大图像缩放到适合轮播的大小。保存这些缩略图并将它们映射到原始图像。为轮播加载缩略图,并使用原始图像文件进行详细图像查看。缩略图将是 png 以获得最大性能。Jpeg 解码不是 iOS 的原生,并且需要比 png 更多的 cpu 来解码它们。你没有要将缩略图数据保留在核心数据中,根据我的经验,.png 文件会做得很好。您可以使用以下代码加载图像
UIImage * image = [UIImage imageWithContentsOfFile:filePath];
这是调整图像大小的代码
- (UIImage *)resizeImage:(UIImage*)image newSize:(CGSize)newSize {
CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
CGImageRef imageRef = image.CGImage;
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
// Set the quality level to use when rescaling
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, newSize.height);
CGContextConcatCTM(context, flipVertical);
// Draw into the context; this scales the image
CGContextDrawImage(context, newRect, imageRef);
// Get the resized image from the context and a UIImage
CGImageRef newImageRef = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
CGImageRelease(newImageRef);
UIGraphicsEndImageContext();
return newImage;
}