图片加载 + 背景变换。
特性
想要调整和圆化下载的大图,使其变为正方形?有时通过CALayer
等操作来实现是可以的,但这可能会降低如UICollectionView
的性能。因此,LiquorImage帮助在后台转换下载的图片
每个UICollectionView cell包含与之对应的两张不同版本的图片:作为背景的模糊版本和前景中的调整大小和圆角版本
//////////////////////////////
// ForegroundImageBuilder.m //
//////////////////////////////
@implementation ForegroundImageBuilder
- (UIImage *)imageFromData:(NSData *)data error:(NSError *__autoreleasing _Nullable *)error {
UIImage *image = [[LQDefaultImageBuilder shared] imageFromData:data error:error];
if (image) {
image = [image roundedCornerImage:15 borderSize:0];
}
return image;
}
@end
////////////
// Cell.m //
////////////
...
- (void)displayImage:(FlickrImage *)image {
...
self.thumbImageTask = ({
LQImageLoaderTask *task = [[LQImageLoaderTask alloc] initWithURL:url];
// setting ForegroundImageBuilder
[task setImageBuilder:[ForegroundImageBuilder new] withMemoryCacheIdentifier:@"thumb"];
task.delegate = self;
task;
});
self.backgroundImageTask = ({
LQImageLoaderTask *task = [[LQImageLoaderTask alloc] initWithURL:url];
CGSize imageSize = self.backgroundImageView.bounds.size;
// block-based image builder with blurring
id<LQImageBuilding> builder = [[LQBlockImageBuilder alloc] initWithBlock:^UIImage * _Nullable(NSData * _Nonnull data, NSError *__autoreleasing _Nullable * _Nonnull error) {
UIImage *image = [[LQDefaultImageBuilder shared] imageFromData:data error:error];
image = [image resizedImage:imageSize interpolationQuality:kCGInterpolationDefault];
image = [image applyDarkEffect];
return image;
}];
[task setImageBuilder:builder withMemoryCacheIdentifier:@"bg"];
task.delegate = self;
task;
});
// start tasks
[[LQImageLoader shared] startTask:self.thumbImageTask];
[[LQImageLoader shared] startTask:self.backgroundImageTask];
}
...
预加载图片,并在显示收藏视图之前可选地表示进度
[[LQImageLoader shared] preloadImageURLs:preloads withProgress:^(LQImageLoaderPreloadingContext * _Nonnull context) {
textLabel.text = [NSString stringWithFormat:@"Preloading:\n\n%lu / %lu", (unsigned long)context.completedCount, (unsigned long)context.totalCount];
} completion:^(LQImageLoaderPreloadingContext * _Nonnull context) {
...
}];
加载数据默认使用HTTP响应缓存信息,但您可以通过HTTPCache
控制图片的max-age
(最大年龄)
[[LQImageLoader shared].HTTPCache setURL:url maxAgeInSeconds:1000];