用于加载、缓存、处理、显示和预热的图像的高级框架。
声明:鉴于 Nuke 的出现,它已被弃用。
[[DFImageManager imageTaskForResource:<#imageURL#> completion:^(UIImage *image, NSError *error, DFImageResponse *response, DFImageTask *task){
// Use loaded image
}] resume];
DFMutableImageRequestOptions *options = [DFMutableImageRequestOptions new]; // builder
options.priority = DFImageRequestPriorityHigh;
options.allowsClipping = YES;
DFImageRequest *request = [DFImageRequest requestWithResource:<#imageURL#> targetSize:CGSizeMake(100, 100) contentMode:DFImageContentModeAspectFill options:options.options];
[[DFImageManager imageTaskForRequest:request completion:^(UIImage *image, NSError *error, DFImageResponse *response, DFImageTask *imageTask) {
// Image is resized and clipped to fill 100x100px square
if (response.isFastResponse) {
// Image was returned synchronously from the memory cache
}
}] resume];
DFImageTask *task = [DFImageManager imageTaskForResource:<#imageURL#> completion:nil];
NSProgress *progress = task.progress;
task.priority = DFImageRequestPriorityHigh; // Change priority of executing task
[task cancel];
使用UIImageView
类的方法处理简单情况
UIImageView *imageView = ...;
[imageView df_setImageWithResource:<#imageURL#>];
使用DFImageView
处理更高级的功能
DFImageView *imageView = ...;
imageView.allowsAnimations = YES; // Animates images when the response wasn't fast enough
imageView.managesRequestPriorities = YES; // Automatically changes current request priority when image view gets added/removed from the window
[imageView prepareForReuse];
[imageView setImageWithResource:<#imageURL#>];
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = <#cell#>
DFImageView *imageView = (id)[cell viewWithTag:15];
if (!imageView) {
imageView = [[DFImageView alloc] initWithFrame:cell.bounds];
imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
imageView.tag = 15;
[cell addSubview:imageView];
}
[imageView prepareForReuse];
[imageView setImageWithResource:<#image_url#>];
return cell;
}
当cell offscreen时立即取消图像任务(可选)
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
[((DFImageView *)[cell viewWithTag:15]) prepareForReuse];
}
NSArray<DFImageRequest *> *requestsForAddedItems = <#requests#>;
[DFImageManager startPreheatingImagesForRequests:requestsForAddedItems];
NSArray<DFImageRequest *> *requestsForRemovedItems = <#requests#>;
[DFImageManager stopPreheatingImagesForRequests:requestsForRemovedItems];
// Enable progressive image decoding
[DFImageManagerConfiguration setAllowsProgressiveImage:YES];
// Create image request that allows progressive image
DFMutableImageRequestOptions *options = [DFMutableImageRequestOptions new];
options.allowsProgressiveImage = YES;
DFImageRequest *request = <#request#>;
DFImageTask *task = <#task#>;
task.progressiveImageHandler = ^(UIImage *__nonnull image){
imageView.image = image;
};
[task resume];
id<DFImageFetching> fetcher = <#fetcher#>;
id<DFImageDecoding> decoder = <#decoder#>;
id<DFImageProcessing> processor = <#processor#>;
id<DFImageCaching> cache = <#cache#>;
DFImageManagerConfiguration *configuration = [[DFImageManagerConfiguration alloc] initWithFetcher:fetcher];
configuration.decoder = decoder;
configuration.processor = processor;
configuration.cache = cache;
[DFImageManager setSharedManager:[[DFImageManager alloc] initWithConfiguration:configuration]];
DFCompositeImageManager
从一个图像管理器构建一个DFImageManaging
协议。《dfcompositeimagemanager》也符合《dfimageManaging》协议,以便可以统一处理单个管理器和组合体。
id<DFImageManaging> manager1 = <#manager#>
id<DFImageManaging> manager2 = <#manager#>
id<DFImageManaging> composite = [[DFCompositeImageManager alloc] initWithImageManagers:@[manager1, manager2]];
协议 | 描述 |
---|---|
DFImageManaging |
加载图像的高级API |
DFImageFetching |
执行图像数据的获取(NSData ) |
DFImageDecoding |
将NSData 转换为UIImage 对象 |
DFImageProcessing |
处理已解码的图像 |
DFImageCaching |
将处理后的图像存储到内存缓存中 |
UIImage
的图像格式(JPEG、PNG、BMP,及更多)GIF
子规范)WebP
子规范)develop
分支创建分叉,并提交一个拉取请求。DFImageManager在MIT许可下可用。请参阅LICENSE文件以获取更多信息。