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;">

这样也是错误的

阅读 14.6k
3 个回答

在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

你上面那坨代码,放哪阿? 作为前端表示很懵逼

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏