在TVML中访问资产目录图像

时间:2015-09-24 01:10:53

标签: tvos tvml

我有没有办法从AppleTV上的TVML中访问本地资产目录中包含的图像?

我注意到this example from Apple中的几个模板呼叫resource://网址,这些网址是常用图片(more info on the dev forms)。这是一个使用云符号呈现的示例按钮:

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

TVML Cloud Button

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

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

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

由于这些按钮将在我的应用程序中重复使用,我宁愿在本地加载它们,也不要在可能的情况下通过HTTP反复调用它们。

3 个答案:

答案 0 :(得分:4)

我有一些成功直接链接到文件系统

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

来自url to bundle的{​​{1}},NSBundle.mainBundle().bundleURL.absoluteString根据您的设置,例如。 relative pathresources,...和images以及您在徽章上展示的图片。

icon拉出目前还没有结果,但后来我还在训练中。 :-D

答案 1 :(得分:0)

我认为命名空间为resource的图标由操作系统本身提供,无法修改。这只是一种预感,我还没有验证过。

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

答案 2 :(得分:0)

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

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

然后在JS端,我可以使用以下内容从捆绑包中加载静态图片:

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

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