国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS中Weex 加載 .xcassets 中的圖片資源的實例詳解

2020-07-26 02:43:14
字體:
來源:轉載
供稿:網友

IOS中Weex 加載 .xcassets 中的圖片資源的實例詳解

前言:

因為 .xcassets 中的圖片資源只能通過 imageNamed: 方法加載,所以需要做一些特殊處理,才能提供給 Weex 使用(PS:純屬娛樂,因為 Weex 跨平臺的特性,這種針對某一端做實現的方案實用價值并不大)。

方案

觀察 WeexSDK 發現有 WXImgLoaderProtocol 這個協議,這個協議包含了下面的方法:

- (id<WXImageOperationProtocol>)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)options completed:(void(^)(UIImage *image, NSError *error, BOOL finished))completedBlock;

從名字就可以看出來,這個方法聲明的功能就是通過指定的 URL 下載圖片并返回一個 UIImage 對象。

下載過 WeexDemo 的人應該都知道里面有一個叫 WXImgLoaderDefaultImpl 的類(PS:別告訴我你對 Weex 感興趣確連 WeexDemo 里面有啥都不知道)。這個類實現了 WXImgLoaderProtocol 協議,內容如下:

- (id<WXImageOperationProtocol>)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)userInfo completed:(void(^)(UIImage *image, NSError *error, BOOL finished))completedBlock{ if ([url hasPrefix:@"http://"]) {  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);  } }];}

其實就是利用 SDWebImage 這個庫實現圖片下載功能。而且我還發現,如果不實現 WXImgLoaderProtocol 協議,就無法在 Weex 的代碼中通過 URL 加載網絡圖片。也就是說 Weex 其實是依賴原生來做網絡圖片加載,至于為什么這么做,我只能說:我不知道。

然后 WeexDemo 通過下面的代碼把 WXImgLoaderDefaultImpl 注冊為 Weex 的一個 iOS 原生 handler

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

這樣我們就可以在 Weex 中加載網絡圖片了,比如:

<image class="img" style="width: 68px; height: 68px;margin-left:20px;" src="https://gw.alicdn.com/tps/TB1El.mKXXXXXXyapXXXXXXXXXX-34-34.gif"></image>

好了,現在就來說說怎么加載 .xcassets 中的圖片資源,其實很簡單,在 WXImgLoaderDefaultImpl 實現的方法中添加幾行代碼就可以:

if ([url hasPrefix:@"xcassets:"]) { UIImage *image = [UIImage imageNamed:[url substringFromIndex:9]]; completedBlock(image, nil, YES); return [WXXCassetsLoaderOperation new];}

這里我定義的規則是:xcassets:+[.xcassets 中的圖片名]。所以我們判斷 url 是不是以 xcassets: 開頭,如果是,通過 imageNamed 方法加載圖片并返回即可。

因為 downloadImageWithURL 方法要求返回遵循 WXImageOperationProtocol 協議的對象,所以我們新建一個 WXXCassetsLoaderOperation 類,然后實現 WXImageOperationProtocol 協議中的 cancel 方法:

- (void)cancel {}

然后我們就可以在 Weex 中加載 .xcassets 中的圖片了。代碼如下:

<image class="img" style="width: 300px; height: 300px;" src="xcassets:reload"></image>

以上就是IOS中Weex 加載 .xcassets 中的圖片資源的實例詳解,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贞丰县| 弥渡县| 安福县| 环江| 达州市| 肃北| 伊春市| 安化县| 青浦区| 定陶县| 云龙县| 廉江市| 云阳县| 临武县| 额尔古纳市| 沙雅县| 武清区| 牟定县| 唐河县| 舟山市| 库车县| 承德县| 张家界市| 兰溪市| 吴旗县| 嫩江县| 突泉县| 南陵县| 库伦旗| 凉城县| 盐源县| 项城市| 吐鲁番市| 康乐县| 龙海市| 桂平市| 清河县| 锡林郭勒盟| 朝阳区| 金平| 宜州市|