Apple watch 多个 Assets.xcassets 文件夹的用途

Posted

技术标签:

【中文标题】Apple watch 多个 Assets.xcassets 文件夹的用途【英文标题】:Apple watch multiple Assets.xcassets folder purpose 【发布时间】:2019-05-10 06:48:06 【问题描述】:

里面的Assets.xcassets有什么区别

1) WatchKit 应用程序

2) WatchKit 扩展

我不确定我应该将图像放在哪个文件夹中。

我需要访问位于WatchKit App 文件夹和WatchKit Extension 中的Interface.storyboard 中的图像(例如testImage.png)。在控制器中,我正在使用:

let menuIcon: UIImage? = UIImage(named: menu.iconName)

我试过了:

选项 1:

1) 将图像放置在WatchKit AppWatchKit Extension

这意味着重复的图像,在两个Assets.xcassets 文件夹中。

选项 2:

1) 仅将图像放置在WatchKit App 中并更改Assets.xcassets 的目标成员资格以支持WatchKit AppWatchKit Extension

哪种方法更好?还是有更好的方法?

【问题讨论】:

【参考方案1】:

这似乎是 watchOS 1 的保留,当时 WatchKit 扩展实际上在 iPhone 上运行,并向手表上运行的 WatchKit 应用发送信息和资源。

有些调用仅适用于 WatchKit 应用的 Assets.xcassets 文件夹,例如 setImageNamed:setBackgroundImageNamed:

有几种方法可以改变界面对象的当前图像:

使用 setImageNamed: 或 setBackgroundImageNamed: 方法分配已在 Watch 应用程序包中的图像。

使用 setImage:、setImageData:、setBackgroundImage: 或 setBackgroundImageData: >方法将图像数据从 WatchKit 扩展传输到 Watch 应用。

按名称指定图像效率更高,因为只需将名称字符串传输到您的 Watch 应用程序。 watchOS 在您的 Watch 应用程序包中搜索具有您指定名称的图像文件。高效指定图像的最有效方法是将它们存储在 Watch 应用程序包中,并根据需要使用 setImageNamed: 或 setBackgroundImageNamed: 来配置相应的对象。

在您的 WatchKit 扩展程序中创建的图像必须先传输到 Watch 应用程序才能使用。例如,在扩展中使用 imageNamed: 方法从 WatchKit 扩展的包中加载图像,而不是从 Watch 应用的包中加载图像。然后您可以调用 setImage: 方法,传入图像对象。 WatchKit 扩展自动将图像传输到 Watch 应用程序进行显示。虽然与直接从 Watch 应用程序包中加载图像相比,这会产生一些额外的开销,但它应该不会对性能或电池寿命产生重大影响。

App Programming Guide for watchOS / Images

我个人不会将图像放在两个文件夹中,因为这会增加您的应用程序的大小。我倾向于将 Storyboard 设置的图像放在 WatchKit 应用程序的文件夹中,并将所有将以编程方式更改的图像放在 Extension 中。

【讨论】:

以上是关于Apple watch 多个 Assets.xcassets 文件夹的用途的主要内容,如果未能解决你的问题,请参考以下文章

带有 Apple Watch 的 Cordova 应用程序无法在 Apple Store 上上传(有多个包含 CFBundleIdentifier 冲突的捆绑包)

Apple Watch:一个 Watchkit App 可以与多个 iOS App 通信吗?

Apple Watch:使用 Premake 创建项目文件时出现问题

识别 Apple Watch 名称

WKInterfaceLabel 未在 WKInterfaceController 中更新 - Swift Apple watch dev

如何覆盖 Apple Watch 后退按钮以弹出到根控制器