プログラムによる資産カタログへのアクセス


96

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

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

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

自分でテストする代わりに私が尋ねる理由は、アセットとアセットカタログを削除してからビルドフォルダーをクリーニングした後でも、アプリケーション内のアセットに引き続きアクセスできるためです。これにより、実装時にアセットカタログをテストできなくなります。

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

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "my-asset@2x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

どのようにアクセスすればよいのかまだわかりませんが、これで解決するでしょうか?

回答:


138

アセットカタログから画像にアクセスするには、アセットグループの名前にアクセスするだけで、拡張子は必要ありません。

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

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

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

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

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


R4バージョン、つまり568サポートがあります。あなたがイメージセットの属性を表示する場合は、ドロップダウン、その後、あなたはiOSの7を実行している4"デバイスに表示されるR4の画像、追加できるデバイスから「デバイス固有の」を選択することができます
bandejapaisa

プログラムでスライス情報にアクセスする方法はありますか?UIImageオブジェクトからcapInsetsプロパティを取得する以外に?
Klaas 2013

@クラスなぜあなたがそれ以外の方法でそれを取得する必要があるのか​​分かりませんUIImage。そして、私が見たところ、いいえ、グループ内の各カテゴリ画像は完全に異なる画像になる可能性があるため、スライスなどの一般的な情報は利用できません。それとも何か不足していますか?
RileyE 2013

@RileyEカスタムオーバーレイビューの計算を行う必要があり、同じインセットを使用したいと思います。計算のためにUIImageを作成する必要があるだけの場合、必要な値を別の場所に保存することをお勧めします(冗長です)。
Klaas 2013

1
Swiftコードは次のように変更されているようですUIImage(named: imageName)
HKTonyLee

26

また、AppleはSwift 3を使用してアセットから画像を取得する新しい方法を追加しました。これは「画像リテラル」と呼ばれ、以下のように機能します。

画像リテラル


5

迅速

アセットカテゴリログ内の画像への参照を取得できます

UIImage(named: "myImageName")

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


1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.