DFImageManager 2.0.1

DFImageManager 2.0.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2016年1月

kean 维护。



用于加载、缓存、处理、显示和预热的图像的高级框架。

声明:鉴于 Nuke 的出现,它已被弃用。

功能

  • 零配置
  • 与 Objective-C 和 Swift 都配合得很好
  • 高性能、异步、线程安全
加载
缓存
处理
  • 可选的 FLAnimatedImage 集成
  • 可选的 WebP 集成
  • 渐进式图像解码,包括渐进式 JPEG
  • 单步进行背景图像解压缩和缩放
  • 调整大小和裁剪加载的图像以 适应显示大小,添加圆角或圆形
高级

入门

  • 查看使用 pod try DFImageManager 命令的综合 示例
  • 查看完整的 文档Wiki
  • 安装@import DFImageManager 并享受!

使用方法

零配置

[[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];

使用UI组件

使用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#>];

UICollectionView

- (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 将处理后的图像存储到内存缓存中

安装

需求

  • iOS 8.0+ / watchOS 2
  • Xcode 7.0+

支持图像格式

  • 支持由UIImage的图像格式(JPEG、PNG、BMP,及更多
  • 支持GIF(GIF子规范)
  • 支持WebP(WebP子规范)

贡献

  • 如果您需要帮助,请使用Stack Overflow。 (标签“dfimagemanager”)
  • 如果您发现了一个错误,并能提供复现步骤,请打开一个问题。
  • 如果您有功能请求,请打开一个问题。
  • 如果您想贡献力量,从develop分支创建分叉,并提交一个拉取请求。

联系方式

许可

DFImageManager在MIT许可下可用。请参阅LICENSE文件以获取更多信息。