LRImageManager 1.0

LRImageManager 1.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最近发布2014年12月

Luis Recuenco维护。



  • 作者
  • Luis Recuenco

LRImageManager是一个功能齐全的Objective-C图片库。

它支持

  • 使用NSOperation和NSURLConnection进行极高性能的异步图片下载。
  • 支持图片请求取消和自动重试。
  • 通过NSCache和NSDictionary提供两种内存缓存类型。
  • 使用GCD进行异步磁盘缓存(根据目录最大大小或时间自动清理缓存存储)。
  • 为图片大小调整和解压提供UIImage类别。
  • 保证具有相同URL和大小的图片只下载一次。
  • 为UIImageView提供分类,便于异步下载图片(设置图片时,可能具有淡入动画效果)。

安装

  1. 使用CocoaPods

    将LRImageManager添加到您的Podfile中

    platform :ios, "6.0"
    pod 'LRImageManager'
    

    运行以下命令

    pod install
    
  2. 手动

    克隆项目或将其作为子模块添加。将整个LRImageManager文件夹拖到您的项目中(也在初始化子模块后,将Vendor/Reachability文件夹下的Reachability.h/m文件添加到项目中)。

使用方法

要下载图片,您只需使用LRImageManager以下方法:

- (void)imageFromURL:(NSURL *)url
                size:(CGSize)size
 cacheStorageOptions:(LRCacheStorageOptions)cacheStorageOptions
   completionHandler:(LRImageCompletionHandler)completionHandler;

只需指定下载URL和要调整的大小(通常为UIImageView容器大小)。如果不要求调整大小,则始终可以使用CGSizeZero。

结果图像将从提供的URL下载,调整到指定的大小,解压缩,并根据storageOptions参数,将其保存到内存(NSCache或NSDictionary)和磁盘。

LRCacheStorageOptions在LRImageCache.h中定义如下。

typedef NS_OPTIONS(NSUInteger, LRCacheStorageOptions)
{
    LRCacheStorageOptionsNone         = 0,
    LRCacheStorageOptionsNSDictionary = 1 << 0,
    LRCacheStorageOptionsNSCache      = 1 << 1,
    LRCacheStorageOptionsDiskCache    = 1 << 2,
};

将其保存到NSDictionary而不是NSCache的选择在您无法承受某些图片从内存中丢失时非常有用(当然,在内存警告的情况下它们将被移除)。您不能同时在NSCache和NSDictionary中保存。

LRImageCompletionHandler包含下载的图像以及任何问题发生的错误。

typedef void (^LRImageCompletionHandler)(UIImage *image, NSError *error);

您始终可以取消特定的请求或所有进行中的请求

- (void)cancelImageRequestFromURL:(NSURL *)url size:(CGSize)size;
- (void)cancelAllRequests;

您可以将自己的图像缓存实现(可能是TMCache的包装)注入LRImageManager,该实现符合LRImageCache协议。如果不这样做,将为您创建一个合适的LRImageCache实例。此缓存由LRImageManager自动处理。如果您仍然希望为自己使用它,则可以轻松地保存和恢复图像

- (UIImage *)memCachedImageForKey:(NSString *)key;

- (UIImage *)memCachedImageForURL:(NSURL *)url size:(CGSize)size;

- (void)diskCachedImageForKey:(NSString *)key
              completionBlock:(void (^)(UIImage *image))completionBlock;

- (void)diskCachedImageForURL:(NSURL *)url
                         size:(CGSize)size
              completionBlock:(void (^)(UIImage *image))completionBlock;

- (void)cacheImage:(UIImage *)image
           withKey:(NSString *)key
    storageOptinos:(LRCacheStorageOptions)storageOptions;

- (void)cacheImage:(UIImage *)image
           withURL:(NSURL *)url
              size:(CGSize)size
    storageOptions:(LRCacheStorageOptions)storageOptions;

为了轻松下载图片并将其分配给UIImageView容器,有一个便利的分类UIImageView+LRNetworking用于此目的。只需设置URL、占位符、大小和存储选项即可。还有一个用于取消当前为该UIImageView请求的方法。

- (void)lr_setImageWithURL:(NSURL *)url
          placeholderImage:(UIImage *)placeholderImage
                      size:(CGSize)size
       cacheStorageOptions:(LRCacheStorageOptions)cacheStorageOptions;

- (void)lr_cancelImageOperation;

您甚至可以在设置图片时选择不同的动画

typedef NS_ENUM(NSUInteger, LRImageViewAnimationType)
{
    LRImageViewAnimationTypeNone,
    LRImageViewAnimationTypeCrossDissolve,
    LRImageViewAnimationTypeFlipFromLeft,
    LRImageViewAnimationTypeFlipFromRight,
    LRImageViewAnimationTypeFlipFromTop,
    LRImageViewAnimationTypeFlipFromBottom,
    LRImageViewAnimationTypeCurlUp,
    LRImageViewAnimationTypeCurlDown,
};

LRImageViewAnimationTypeCrossDissolve 将默认使用。您可以通过更改 lr_animationTime 来调整动画时间。

您还可以通过 lr_activityIndicator 设置活动指示器视图,通过 lr_postProcessingBlock 为后台下载的图片制作精美的动画(例如应用灰度效果),或者希望在图片设置后执行代码块,使用 lr_completionHandler

要求

LRImageManager 需要iOS 6.0 和 ARC。

在您的非ARC项目中仍然可以使用 LRImageManager。只需在每个源文件中设置 -fobjc-arc 编译器标志即可。

示例

此库的最佳示例是作为 LRTVDBAPIClient 示例开发的全功能电视剧追踪应用。

联系方式

LRImageManager 由 Luis Recuenco 创建:@luisrecuenco

贡献

如果您想要为项目做出贡献,请按照以下步骤操作

  1. 对仓库进行Fork。
  2. 将您的Fork克隆到您的本地机器上。
  3. 创建您的功能分支。
  4. 提交您的更改,将其推送到您的Fork,并提交拉取请求。

许可证

LRImageManager 适用于 MIT 许可证。有关更多信息,请参阅 LICENSE 文件