首页 > 解决方案 > Apple watch 多个 Assets.xcassets 文件夹的用途

问题描述

Assets.xcassetsin 和in有什么区别

1) WatchKit 应用

2) WatchKit 扩展

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

我需要访问Interface.storyboard位于WatchKit App文件夹和WatchKit Extension. 在控制器中我设置它使用:

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

我试过了:

选项1:

1)将图像放置在两者WatchKit AppWatchKit Extension

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

选项 2:

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

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

标签: iosswiftxcodeapple-watchwatchos

解决方案


这似乎是 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 应用程序包加载图像相比有一些额外的开销,但它不应该对性能或电池寿命产生重大影响。

watchOS / 图像应用程序编程指南

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


推荐阅读