UIWebView 中的资产目录图像

Posted

技术标签:

【中文标题】UIWebView 中的资产目录图像【英文标题】:Asset Catalog images inside a UIWebView 【发布时间】:2017-09-05 02:19:17 【问题描述】:

Xcode 9 在 ios 项目中使用矢量又向前迈进了一步。它显然会保留源 PDF,以便可以根据需要以完整质量生成图像。

我想知道是否可以从 UIWebView 内的 html 访问这些图像?

我可以想象三种可能的方法:

    您在 HTML 或 CSS 中放置的一些魔法将被 iOS 识别和替换。例如:

    <img src=Asset Name>

    了解获取资产的命名方案。例如:

    <img src="some/path/asset~ipad@3x">

    将图像“渲染”到UIWebView之外并传入。

这些有可能吗?还有其他方法吗?

考虑到我们在矢量方面已经走了多远,如果不需要的话,我不希望必须预渲染每个图像变体并将它们打包到资产目录之外。

【问题讨论】:

【参考方案1】:

今天我需要将 XCAsset's 中的 UIImage 渲染成 UIWebView

我的要求是准备好合适的HTML,并将其加载到UIWebView中,如下所示

self.myWebView.loadHTMLString(html, baseURL: nil)

为了从XCAsset的加载图像,首先将图像加载到UIImage,然后将其转换回Base64 Encoding,然后将图像放入<img>标签。

代码如下所示

let redClockImage = UIImage.init(named: "clock-red")!
let imageData:Data =  UIImagePNGRepresentation(self)!
let base64String = imageData.base64EncodedString()

let html = """
           //my html
           <img src="data:image/png;base64, \(base64String)" />
           //rest of my html
           """

//then i load this html into the webview
self.myWebView.loadHTMLString(html, baseURL: nil)

为方便起见,我将UIImage -> Base64 String 转换为an extension。

【讨论】:

以上是关于UIWebView 中的资产目录图像的主要内容,如果未能解决你的问题,请参考以下文章

检测项中的静态库是否使用UIWebView

如何从 Swift 3 中的 UIWebview 中的链接打开另一个视图?

iOS UIWebView - 在本机应用程序中缓存资产

从 Documents 目录获取图像以在 UIWebView 上查看

无法访问资产目录中的图像

为啥我无法加载位于资产目录中的图像?