【问题标题】:How to switch between multiple .xcassets files如何在多个 .xcassets 文件之间切换
【发布时间】:2019-07-11 12:41:59
【问题描述】:

我们为 3 个不同的应用设置了 3 个目标,这些应用提供相似的功能集但用户界面不同。 所有这 3 个目标都有不同的 .xcassets 文件。但现在根据 Apple 4.3 指南,他们要求我们创建一个容器并处理来自同一个容器的不同 UI。

现在我们已经为不同的目标提供了不同的图像资产文件,我如何以编程方式在不同的 .xcassets 文件之间切换。

【问题讨论】:

  • 为什么不把它们全部放在一个.xcassets文件中,并设置每个资产的设备使用情况?
  • 目前我在每个 xcassets 文件中都有同名的不同图像。无论如何,我不想在分配每个图像时处理多个条件,而是更愿意在加载时加载特定的 xcasset 文件。
  • 你可以直接访问.xcassets的图片,你只需要检查你正在使用的目标。
  • @PrafulKadam 是的,甚至我也在使用类似的方式来访问来自xcassets的图像

标签: ios swift xcode xcasset uiimageasset


【解决方案1】:

首先我创建了多个图像版本是相同的 xcasset 文件,然后 我为 UIImage 创建了一个扩展并编写了方便的初始化程序,我在其中检查当前目标并相应地分配图像名称

extension UIImage {

convenience init?(editableNamed: String) {
    let newName = appDel.target != "target1" ? editableNamed : "\(editableNamed)_target1"
    if (UIImage(named: newName) != nil) {
        self.init(named: newName)
    }
    else {
        self.init(named: editableNamed)
    }
}

所以每当我分配像

这样的图像时
cell.imgCheck.image = UIImage(editableNamed: "iconCheck")

它检查当前目标,然后从 xcasset 文件中分配适当的图像。

【讨论】:

    【解决方案2】:

    您可以为多个目标设置多个xcassets,假设您有A、B、C 目标,并且每个目标拥有三个不同的xcassets,您可以通过两种方式解决此问题:

    1. 为不同的目标添加同名的图像并直接访问图像。 Xcode 将运行时访问特定的xcassets 图像。

    2. 在访问图像时添加针对不同目标的检查

    编码示例:

    if target == "A" {
       let imageView = UIImageView(image: UIImage(named: "firstImage"))
    }
    if target == "B" {
      let imageView = UIImageView(image: UIImage(named: "secondImage"))
    }
    if target == "C" {
      let imageView = UIImageView(image: UIImage(named: "thirdImage"))
    }
    

    【讨论】:

    • 我在所有 xcassets 中都有不同的图像,图像名称相同,例如“firstImage”。
    • @PrafulKadam 然后你必须添加一个目标检查。
    • @JarvisTheAvenger 你能告诉我如何在视图控制器中访问目标,即你能告诉你在上面的例子中使用的目标变量的主要声明吗?
    • @jayantrawat 您可以使用项目构建设置下的用户定义部分添加基于目标的变量以区分目标。
    • 使用以下链接了解如何添加用户自定义设置:thetopsites.net/article/52433707.shtml
    猜你喜欢
    • 1970-01-01
    • 2022-12-25
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 2022-12-14
    相关资源
    最近更新 更多