当前位置: 移动技术网 > IT编程>移动开发>IOS > IOS中Weex 加载 .xcassets 中的图片资源的实例详解

IOS中Weex 加载 .xcassets 中的图片资源的实例详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

家好月圆剧情介绍,喜看,泷泽萝拉内涵图

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 uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网