Weex 自定义 handler

2023-12-27 17:18 更新

Handler 的作用是什么?比如 WeexSDK 目前没有提供图片下载的能力,而是在 ​WXImgLoaderProtocol​ 定义了一些获取图片的接口。Image 组件正是通过​ WXImgLoaderProtocol ​获得并展示图片,开发者可以实现该 protocol 中的接口方法,这样​ image​ 标签才能正常展示图片。

开发者也可以定义自己的 ​protocol​ 和对应的实现来使用 ​handler​ 机制。常见的一个场景就是在每个 App 中需要特定的 Handler 来实现一些公共的能力。

1.新建基类为 NSObject 的类,并实现 ​WXImgLoaderProtocol​ 协议,实现 ​WXImgLoaderProtocol​ 的方法。 下面加载图片的逻辑需要依赖 SDWebImage,你也可以不依赖 SDWebimage 使用自己的方式加载对应 URL 图片。

@implementation WXImgLoaderDefaultImpl
- (id<WXImageOperationProtocol>)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)userInfo completed:(void(^)(UIImage *image,  NSError *error, BOOL finished))completedBlock {
    if ([url hasPrefix:@"//"]) {
        url = [@"http:" stringByAppendingString:url];
    }
    return (id<WXImageOperationProtocol>)[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:url] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
    if (completedBlock) {
        completedBlock(image, error, finished);
    }
    }];
}
@end

2.注册

[WXSDKEngine registerHandler:[WXImgLoaderDefaultImpl new] withProtocol:@protocol(WXImgLoaderProtocol)];

3.使用

id<WXImgLoaderProtocol> imageLoader = [WXSDKEngine handlerForProtocol:@protocol(WXImgLoaderProtocol)];
[iamgeLoader downloadImageWithURL:imageURl imageFrame:frame userInfo:customParam completed:^(UIImage *image, NSError *error, BOOL finished) {
}];


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号