Asset Catalogで同じ名前の別画像を利用する

はじめに

  • Xcodeのアセットカタログ(デフォルトではAssets.xcassets)は、画像などのリソースを管理します
  • アセットカタログ内で、フォルダ分けも可能です
  • その際、別のフォルダに同じ名前の画像を置きたくなることもあります
  • その場合の扱い方です

検証環境

  • Xcode 10.2.1
  • iOS 12.2
  • Swift 5

フォルダにNamespaceを付与する

デフォルトの状態(Namespaceなし)

no_namespace

  • この画像の例では、birdという画像がforestフォルダとseaフォルダの両方に配置されています
  • ですが、デフォルトの状態ではフォルダ名は無視されるので、これらの画像にはbirdという名前でアクセスすることになり、区別ができません

フォルダ名付きでのアクセス(Namespaceあり)

with_namespace

  • アセットカタログ内でフォルダを選択し、Attributes InspectorからProvides Namespaceにチェックを入れると、そのフォルダ名がNamespaceとして利用されます
    • フォルダの色も黄色から水色に変わっていますね
  • この画像の例では、それぞれforest/birdsea/birdという名前で区別されます
  • こんな感じで、コード内でもInterface Builderでも参照できます

    imageView.image = index == 0 ? UIImage(named: "forest/bird") : UIImage(named: "sea/bird")

    image_ib

    まとめ

    • Namespaceがあると、格段に管理がしやすくなりますね
    • 今回作成したサンプルコードは、GitHubに置きました
    • aokiplayer/AssetFolderSample

    参考