定制适配器

HippyImageViewCustomLoader

在Hippy SDK中, 前端<Image>组件默认对应的HippyImageView会根据source属性使用默认行为下载图片数据并显示。但是某些情况下,业务方希望使用自定义的图片加载逻辑(比如业务使用了缓存,或者拦截特定URL的数据),为此SDK提供了HippyImageViewCustomLoader协议。

用户实现此协议,自行根据图片的URL返回数据即可,HippyImageView将根据返回的数据展示图片。

  1. @protocol HippyImageViewCustomLoader<HippyBridgeModule>
  2. @required
  3. /**
  4. * imageView:
  5. */
  6. - (void)imageView:(HippyImageView *)imageView
  7. loadAtUrl:(NSURL *)url
  8. placeholderImage:(UIImage *)placeholderImage
  9. context:(void *)context
  10. progress:(void (^)(long long, long long))progressBlock
  11. completed:(void (^)(NSData *, NSURL *, NSError *))completedBlock;
  12. - (void)cancelImageDownload:(HippyImageView *)imageView withUrl:(NSURL *)url;
  13. @end

协议实现

  1. @interface CustomImageLoader : NSObject <HippyImageViewCustomLoader>
  2. @end
  3. @implementation CustomImageLoader
  4. HIPPY_EXPORT_MODULE()
  5. - (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 {
  6. NSError *error = NULL;
  7. // 业务方自行获取图片数据,返回数据或者错误
  8. NSData *imageData = getImageData(url, &error);
  9. // 将结果通过block通知给
  10. completedBlock(imageData, url, error);
  11. }
  12. @end

业务方需要务必添加HIPPY_EXPORT_MODULE()代码以便在hippy框架中注册此ImageLoader模块,系统将自动寻找实现了HippyImageViewCustomLoader协议的模块当做ImageLoader。

PS: 若有多个模块实现HippyImageViewCustomLoader协议,系统只会使用其中一个作为默认ImageLoader