weex中怎么加载本地图片
本文介绍了weex中怎么加载本地图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我在官方文档找到下面一段话
本地资源
Weex SDK 提供 local scheme 来访问打包在应用程序中的资源,此 scheme 无法在 H5 环境下使用。目前,开发者可以在 image 组件和字体文件中使用本地资源。在 iOS 中,Weex 会在 bundle resources 中查找。例如,image 组件的 src 属性为 local:///app_icon', Weex 会加载 bundle resouce 中名为 app_icon 的图像资源,而字体文件也以相同的方式工作。
在 Android 中,image 组件将从 drawable 资源文件夹加载,如 res/drawable-xxx。但加载字体文件是不同的,Android 框架无法从 res 加载字体文件,因此 SDK 将从 asserts 文件夹加载它。
但是我在demo中
<img src="local:///login-bg" style="width: 300; height: 300;">
发现并不能加载成功。
<img src="uri(local:///login-bg)" style="width: 300; height: 300;">
这样也是错误的
解决方案
在0.12.0-rc0版本的SDK中,发现下面的代码,对应官方文档的local://icon.png
的方案,但是从iOS端的源码 NSURL *resourceURL = [[NSBundle mainBundle] URLForResource:resourceName withExtension:@""];
来看,这样是无法加载.xcassets
文件中的图片,因此所有的图片资源都是在文件夹中,需要自己管理@2x、@3x的问题
#import "WXURLRewriteDefaultImpl.h"
#import "WXLog.h"
#import "WXSDKInstance.h"
NSString *const WXURLLocalScheme = @"local";
@implementation WXURLRewriteDefaultImpl
- (NSURL *)rewriteURL:(NSString *)url
withResourceType:(WXResourceType)resourceType
withInstance:(WXSDKInstance *)instance
{
NSURL *completeURL = [NSURL URLWithString:url];
if ([completeURL isFileURL]) {
return completeURL;
} else if ([self isLocalURL:completeURL]) {
NSString *resourceName = [[completeURL host] stringByAppendingString:[completeURL path]];
NSURL *resourceURL = [[NSBundle mainBundle] URLForResource:resourceName withExtension:@""];
if (!resourceURL) {
WXLogError(@"Invalid local resource URL:%@, no resouce found.", url);
}
return resourceURL;
} else {
return [instance completeURL:url];
}
}
- (BOOL)isLocalURL:(NSURL *)url
{
return[[[url scheme] lowercaseString] isEqualToString:WXURLLocalScheme];
}
@end
这篇关于weex中怎么加载本地图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文