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图片已经加载。下拉刷新的时候图片就会正常显示。

 

posted @ 2018-02-07 14:49  Belinda_sl  阅读(713)  评论(0编辑  收藏  举报