web-dev-qa-db-ja.com

プログラムで資産カタログにアクセスする

これは新しい機能であり、これは不可能かもしれませんが、資産カタログを使用して資産を整理したいのですが、すべての画像にプログラムでアクセスできます。今、自分の画像にどのようにアクセスしますか?私はまだそのようなファイル名でそれらにアクセスしますか:

[UIImage imageNamed:@"my-asset-name.png"];

一見、アセットカタログは拡張機能を参照しないため、「。png」なしでアクセスする方が効率的ですか?

自分でテストする代わりに質問する理由は、資産と資産カタログを削除し、ビルドフォルダーを削除した後でも、アプリケーションで資産にアクセスできるためです。これにより、実装時にアセットカタログをテストできません。

アセットカタログを調べたところ、各アセットの「Contents.json」が見つかりました。フォーマットは次のようになっています。

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "[email protected]"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

私はまだどのようにアクセスする必要があるのか​​わかりませんが、おそらくこれが役立つでしょうか?

91
RileyE

資産カタログから画像にアクセスするには、拡張子なしで資産グループの名前にアクセスするだけです。

そのため、@"[email protected]"という名前の画像をアセットカタログに追加すると、my-buttonというアセットグループが作成されます。

今、あなたがしなければならないのは、次のように画像にアクセスすることです:

// Objective-C
[UIImage imageNamed:@"my-button"];
// Swift
UIImage(named: "my-button")

また、アセットグループの名前を変更して(画像の名前を変更せずに)アセットグループを編集したり、個々のコンポーネントを変更したりできます。これにより、UIScreenチェックなしで異なるscalescalesの間で完全に異なるアセットを表示するだけでなく、より簡単な命名規則に従うことができます。

さまざまなデバイスサイズの画像を組み込むには、アセットカタロググループのオプションの[デバイス]サブヘッダーの下で切り替える必要があります。 ここにそのトグルの例があります(グループを右クリックして利用可能です)。

127
RileyE

また、Appleは、Swift 3を使用してアセットから画像を取得する新しい方法を追加しました。これは'Image Literal'として呼び出し、以下のように動作します。

Image Literal

15
Yigit Yilmaz

スイフト

資産カタログの画像への参照を取得できます

UIImage(named: "myImageName")

拡張機能を含める必要はありません。

3
Suragch

@RileyEは100%正しいです。ただし、私の経験から、画像のアセットカタログ参照に末尾の空白が含まれることがあることにも注意してください。オートコンプリートによってストーリーボード/ xibsが追加される場合、おそらく気付かないでしょう。しかし、コードからそれを参照するとき、問題が何であるかはそれほど明白ではありません。

1
AppHandwerker