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:@"//"]) {
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 中的图片资源的实例详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# IOS中Weex
# 加载
# .xcassets
# 中的图片资源
# IOS
# weex加载图片资源
# ios原生和react-native各种交互的示例代码
# iOS中Cell的Section展开和收起的示例代码
# 详解iOS 计步器的几种实现方式
# iOS发送短信功能的实现代码
# iOS app 右滑返回操作的两种方法
# iOS将地址解析成经纬度的方法
# 就可以
# 的人
# 我不
# 好了
# 我还
# 都不
# 告诉我
# 如有
# 感兴趣
# 希望能
# 你对
# 这么做
# 来做
# 就来
# 一个叫
# 谢谢大家
# 提供给
# 新建一个
# 其实很简单
相关文章:
Python lxml的etree和ElementTree有什么区别
外贸公司网站制作,外贸网站建设一般有哪些步骤?
网页设计网站制作软件,microsoft office哪个可以创建网页?
建站之星2.7模板:企业网站建设与h5定制设计专题
活动邀请函制作网站有哪些,活动邀请函文案?
如何用IIS7快速搭建并优化网站站点?
如何高效搭建专业期货交易平台网站?
如何在阿里云部署织梦网站?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
如何在阿里云服务器自主搭建网站?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
建站之星安装后如何自定义网站颜色与字体?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
制作网站的公司有哪些,做一个公司网站要多少钱?
简历在线制作网站免费版,如何创建个人简历?
c++怎么用jemalloc c++替换默认内存分配器【性能】
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何设计高效校园网站?
建站之星2.7模板快速切换与批量管理功能操作指南
如何通过WDCP绑定主域名及创建子域名站点?
如何快速打造个性化非模板自助建站?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
北京制作网站的公司,北京铁路集团官方网站?
大连 网站制作,大连天途有线官网?
SQL查询语句优化的实用方法总结
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
中山网站推广排名,中山信息港登录入口?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
制作旅游网站html,怎样注册旅游网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
韩国服务器如何优化跨境访问实现高效连接?
,南京靠谱的征婚网站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
购物网站制作公司有哪些,哪个购物网站比较好?
如何选择最佳自助建站系统?快速指南解析优劣
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
如何在腾讯云免费申请建站?
西安专业网站制作公司有哪些,陕西省建行官方网站?
建站之星如何防范黑客攻击与数据泄露?
专业公司网站制作公司,用什么语言做企业网站比较好?
常州企业建站如何选择最佳模板?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
建站之星上传入口如何快速找到?
*请认真填写需求信息,我们会在24小时内与您取得联系。