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

时间:2019-05-10 06:48:07

标签: ios swift xcode apple-watch watch-os

Assets.xcassets

有什么区别

1)WatchKit应用

2)WatchKit扩展

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

我需要访问Interface.storyboard文件夹中的WatchKit AppWatchKit Extension中的图像(例如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 个答案:

答案 0 :(得分:1)

当WatchKit Extension实际上在iPhone上运行并将信息和资源发送到手表上运行的WatchKit App时,这似乎是watchOS 1的一个保留。

有些呼叫仅适用于WatchKit App的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 App的文件夹中,并将所有将以编程方式更改的图像放置在扩展程序中。