访问 TVML 中的资产目录图像

Access Asset Catalog images in TVML

我有什么方法可以从 AppleTV 上的 TVML 中访问本地资产目录中包含的图像吗?

我注意到 this example from Apple call out to resource:// URLs, which are common use images (more info on the dev forms 中的几个模板。这是一个使用云符号呈现的示例按钮:

<buttonLockup>
  <badge src="resource://button-cloud" class="whiteBadge" />
  <title>Title 3</title>
</buttonLockup>

我尝试指向我自己的一些资源而不是 button-cloud 但没有成功。

我已经能够通过链接到外部提供的图像来更改这些按钮上的图标,如下所示:

<buttonLockup>
  <badge src="http://localhost:5000/static/heartFull.png" class="whiteBadge" width="50" height="50"/>
  <title>Title 3</title>
</buttonLockup>

由于这些按钮将在我的整个应用程序中重复使用,如果可能的话,我宁愿在本地加载它们也不愿通过 HTTP 重复调用它们。

我在直接链接到文件系统方面取得了一些成功

<badge src=\"file:///<url to bundle>/<relative path to resource>/<icon>.png\" width=\"50\" height=\"50\" />

with... url to bundle from NSBundle.mainBundle().bundleURL.absoluteString, relative path 根据您的设置,例如。 resourcesimages、... icon 好吧,你的图片要显示在徽章上。

Assets.xcassets 拉动到目前为止还没有成功,但我仍在训练中。 :-D

我认为resource命名空间的图标是由OS本身提供的,不能修改。这只是预感,我还没有验证。

https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/ResourceValues.html

谢谢@Baa,真的帮了我大忙!只是想添加一点,以便在 JS 端引用包的路径,我需要将以下 Swift 代码添加到我的 AppDelegate.swift 文件中的 appController(_ appController: TVApplicationController, evaluateAppJavaScriptIn jsContext: JSContext) 函数中(可能需要手动添加,如果你没有看到它):

jsContext.setObject(Bundle.main.bundleURL.absoluteString, forKeyedSubscript: "BUNDLE_URL" as NSCopying & NSObjectProtocol)

然后在 JS 端,我可以使用以下代码从包中加载静态图像:

const imageFromBundle = `${BUNDLE_URL}myImageName.png`;

请注意,据我所知,file:/// 前缀是不必要的,没有它加载捆绑图像对我来说工作正常。