定制适配器
HippyImageViewCustomLoader
在Hippy SDK中, 前端<Image>
组件默认对应的HippyImageView会根据source属性使用默认行为下载图片数据并显示。但是某些情况下,业务方希望使用自定义的图片加载逻辑(比如业务使用了缓存,或者拦截特定URL的数据),为此SDK提供了HippyImageViewCustomLoader协议。
用户实现此协议,自行根据图片的URL返回数据即可,HippyImageView将根据返回的数据展示图片。
@protocol HippyImageViewCustomLoader<HippyBridgeModule>
@required
/**
* imageView:
*/
- (void)imageView:(HippyImageView *)imageView
loadAtUrl:(NSURL *)url
placeholderImage:(UIImage *)placeholderImage
context:(void *)context
progress:(void (^)(long long, long long))progressBlock
completed:(void (^)(NSData *, NSURL *, NSError *))completedBlock;
- (void)cancelImageDownload:(HippyImageView *)imageView withUrl:(NSURL *)url;
@end
协议实现
@interface CustomImageLoader : NSObject <HippyImageViewCustomLoader>
@end
@implementation CustomImageLoader
HIPPY_EXPORT_MODULE()
- (void)imageView:(HippyImageView *)imageView loadAtUrl:(NSURL *)url placeholderImage:(UIImage *)placeholderImage context:(void *)context progress:(void (^)(long long, long long))progressBlock completed:(void (^)(NSData *, NSURL *, NSError *))completedBlock {
NSError *error = NULL;
// 业务方自行获取图片数据,返回数据或者错误
NSData *imageData = getImageData(url, &error);
// 将结果通过block通知给
completedBlock(imageData, url, error);
}
@end
业务方需要务必添加HIPPY_EXPORT_MODULE()代码以便在hippy框架中注册此ImageLoader模块,系统将自动寻找实现了HippyImageViewCustomLoader协议的模块当做ImageLoader。
PS: 若有多个模块实现HippyImageViewCustomLoader协议,系统只会使用其中一个作为默认ImageLoader