BBAImageView.h 6.23 KB
//
//  BBAImageView.h
//  BaiduBoxApp
//
//  Created by Jingxiang Zhang on 2/3/15.
//  Copyright (c) 2015 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <BBAFoundation/BBACacheManager.h>
#import <objc/runtime.h>
#import <objc/message.h>

#  if __has_include(<SDWebImage/SDWebImage.h>)
#    import <SDWebImage/SDWebImage.h>
#  elif __has_include(<SDWebImage.h>)
#    import "SDWebImage.h"
#  elif __has_include(<WebImage/WebImage.h>)
#    import <WebImage/WebImage.h>
#  elif __has_include(<SDWebImage/SDWebImage-umbrella.h>)
#    import <SDWebImage/SDWebImage-umbrella.h>
#  else
#    import "WebImage.h"
#  endif
#  if __has_include(<FLAnimatedImage/FLAnimatedImage.h>)
#    import <FLAnimatedImage/FLAnimatedImage.h>
#  elif __has_include(<SDWebImage/FLAnimatedImage.h>)
#    import <SDWebImage/FLAnimatedImage.h>
#  else
#    import "FLAnimatedImage.h"
#  endif

/// 图片相关选项,可组合使用
typedef NS_ENUM(NSUInteger, BBAImageViewOption)
{
    // 默认选项
    BBAImageViewOptionNone                          = 0x01L << 0,
    
    // 点击重新加载图片
    BBAImageViewOptionReloadWhenTap                 = 0x01L << 1,
    
    // 切入前台时重新加载图片
    BBAImageViewOptionReloadWhenEnterForeground     = 0x01L << 2,
    
    // 指定Cache资源优先级大于默认图,避免闪现默认图
    BBAImageViewOptionUseCacheFirst                 = 0x01L << 3,
    
    // 指定Cache资源优先级大于默认图,避免闪现默认图 同时异步线程加载图片,避免阻碍UI线程
    BBAImageViewOptionUseCacheFirstAndLoadImageInBackgroundThread                 = 0x01L << 4,
    
    // 网络队列优先级低,网络请求优先级低
    BBAImageViewOptionLowPriority                   = 0x01L << 5,
    
    // 网络队列优先级高,网络请求优先级高
    BBAImageViewOptionHighPriority                  = 0x01L << 6,
    
    // 网络队列优先级高,网络队列优先级中
    BBAImageViewOptionNormalPriority                = 0x01L << 7,
};

/// 图像拉伸模式
typedef NS_ENUM(NSInteger, BBAImageViewContentMode)
{
    /// 等比适应(默认值)
    BBAImageViewContentModeScaleAspectFit   = UIViewContentModeScaleAspectFit,
    
    /// 居中对齐
    BBAImageViewContentModeCenter           = UIViewContentModeCenter,
    
    /// 拉伸填充
    BBAImageViewContentModeScaleToFill      = UIViewContentModeScaleToFill,
    
    /// 等比填充
    BBAImageViewContentModeScaleAspectFill  = UIViewContentModeScaleAspectFill,
    
    /// 平铺模式
    BBAImageViewContentModeTile             = -1001,
};

/// 图片加载完成回调
typedef void(^BBAImageViewDownloadCompletedCallback)(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL);

/// 图片完成后的回调
typedef void(^BBAImageViewCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL);

/// 百度通用图片
__attribute__((deprecated("Class deprecated. Use `SDAnimatedImageView Class`")))
@interface BBAImageView : FLAnimatedImageView

/// 加载中的占位图
@property (nonatomic, strong, readonly) UIImage *defaultImage;
/// 加载失败的占位图
@property (nonatomic, strong, readonly) UIImage *failedImage;
/// 已加载的图片
@property (nonatomic, strong, readonly) UIImage *loadedImage;
/// 图片URL
@property (nonatomic, strong, readonly) NSURL   *URL;

/// 当且仅当图片加载成功,而且是网络图片的时候才有imageIdentifier
@property (nonatomic, copy) NSString * imageIdentifier;

/// 下载图片
+ (void)downloadImage:(NSURL *)URL cacheMode:(BBACacheMode)cacheMode completedCallback:(BBAImageViewDownloadCompletedCallback)completedCallback options:(SDWebImageOptions)options;
/// 检查图片是否存在于缓存
+ (BOOL)isImageExistsInLocalCache:(NSURL *)URL;
/// 删除缓存中的图片
+ (void)removeImageFromCache:(NSURL *)URL;

/// 初始化图片
- (instancetype)initWithCacheMode:(BBACacheMode)cacheMode;
/// 初始化图片
- (instancetype)initWithFrame:(CGRect)frame cacheMode:(BBACacheMode)cacheMode;
/// 初始化图片
- (instancetype)initWithFrame:(CGRect)frame cacheMode:(BBACacheMode)cacheMode options:(BBAImageViewOption)options;
/// 初始化图片
- (instancetype)initWithFrame:(CGRect)frame cacheMode:(BBACacheMode)cacheMode options:(BBAImageViewOption)options contentMode:(BBAImageViewContentMode)contentMode;

/// 设置图片的URL
- (void)setImageWithURL:(NSURL *)URL;
/// 设置图片的URL
- (void)setImageWithURL:(NSURL *)URL defaultImage:(UIImage *)defaultImage;
/// 设置图片的URL
- (void)setImageWithURL:(NSURL *)URL defaultImage:(UIImage *)defaultImage failedImage:(UIImage *)failedImage;
/// 设置图片的URL
- (void)setImageWithURL:(NSURL *)URL defaultImage:(UIImage *)defaultImage defaultImageContentMode:(BBAImageViewContentMode)defaultImageContentMode failedImage:(UIImage *)failedImage failedImageContentMode:(BBAImageViewContentMode)failedImageContentMode;
/// 设置图片的URL带回调block
- (void)setImageWithURL:(NSURL *)URL completed:(BBAImageViewCompletionBlock)completedBlock;
/// 设置图片的URL带回调block
- (void)setImageWithURL:(NSURL *)URL defaultImage:(UIImage *)defaultImage completed:(BBAImageViewCompletionBlock)completedBlock;
/// 设置图片的URL带回调block
- (void)setImageWithURL:(NSURL *)URL defaultImage:(UIImage *)defaultImage failedImage:(UIImage *)failedImage completed:(BBAImageViewCompletionBlock)completedBlock;
/// 设置图片的URL带回调block
- (void)setImageWithURL:(NSURL *)URL defaultImage:(UIImage *)defaultImage defaultImageContentMode:(BBAImageViewContentMode)defaultImageContentMode failedImage:(UIImage *)failedImage failedImageContentMode:(BBAImageViewContentMode)failedImageContentMode completed:(BBAImageViewCompletionBlock)completedBlock;
/// @brief 设置图片URL及其它相关参数
/// @param URL 图片地址
/// @param headers 图片请求的 request headers
/// @param defaultImage 默认图片
/// @param defaultImageContentMode 默认图片的 contentMode
/// @param failedImage 失败图片
/// @param failedImageContentMode 失败图片的 contentMode
/// @param completedBlock 回调

/// 重新加载图片
- (void)reload;
/// 重新加载图片
- (void)reload:(BOOL)forceReload;
/// 取消图片下载任务
- (void)cancel;

@end