iOS 集成weexSDK,js加载本地gif图片显示缓慢的问题。
weex加载图片,在weex的官方文档中已经说明,文档:http://weex.apache.org/cn/guide/extend-ios.html
文档中说明weexSDK 没有图片下载的能力,需要实现 WXImgLoaderProtocol,需要集成第三方SDWebImage。
在项目中创建一个WXImgLoaderDefaultImpl类,WXImgLoaderDefaultImpl.h和.m文件如下所示:
WXImgLoaderDefaultImpl.h
#import <Foundation/Foundation.h> #import <WeexSDK/WXImgLoaderProtocol.h> @interface WXImgLoaderDefaultImpl : NSObject<WXImgLoaderProtocol, WXModuleProtocol> @end
WXImgLoaderDefaultImpl.m
#import "WXImgLoaderDefaultImpl.h" #import "UIImageView+WebCache.h" #define MIN_IMAGE_WIDTH 36 #define MIN_IMAGE_HEIGHT 36 #if OS_OBJECT_USE_OBJC #undef WXDispatchQueueRelease #undef WXDispatchQueueSetterSementics #define WXDispatchQueueRelease(q) #define WXDispatchQueueSetterSementics strong #else #undef WXDispatchQueueRelease #undef WXDispatchQueueSetterSementics #define WXDispatchQueueRelease(q) (dispatch_release(q)) #define WXDispatchQueueSetterSementics assign #endif @interface WXImgLoaderDefaultImpl() @property (WXDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue; @end @implementation WXImgLoaderDefaultImpl #pragma mark - #pragma mark WXImgLoaderProtocol - (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); } }]; }
在初始化weexSDK的时候注册即可:
[WXSDKEngine registerHandler:[WXImgLoaderDefaultImpl new] withProtocol:@protocol(WXImgLoaderProtocol)];
以上在weex的playground中都有。
下面是加载本地gif图片显示缓慢的问题,具体情况:加载js界面,在js界面下拉刷新时需要加载本地的gif图片,出现动画效果,但是当更新完数据的时候gif还没有加载出来,等时间长一点的时候再下拉刷新的时候gif就正常显示了。
这种情况的解决办法:
在加载js界面的同时加载本地的gif图片,如果本地图片过多的话不建议使用此方法。
在加载js的ViewController中,导入
#import "UIImageView+WebCache.h"
在viewDidLoad方法中加载图片(不一定在此方法中)
这样在下拉刷新之前,gif图片已经加载。下拉刷新的时候图片就会正常显示。