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 App
和WatchKit Extension
中
这意味着重复的图像,在两个Assets.xcassets
文件夹中。
选项 2:
1) 仅将图像放置在WatchKit App
中并更改Assets.xcassets
的目标成员资格以支持WatchKit App
和WatchKit 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 创建项目文件时出现问题
WKInterfaceLabel 未在 WKInterfaceController 中更新 - Swift Apple watch dev