weex中怎么加载本地图片

查看:567
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆