Akses Katalog Aset secara terprogram


96

Saya tahu ini adalah fitur baru dan ini mungkin tidak dapat dilakukan, tetapi saya ingin sekali dapat menggunakan Katalog Aset untuk mengatur aset saya, tetapi saya mengakses semua gambar saya secara terprogram. Bagaimana saya mengakses gambar saya, sekarang? Apakah saya masih mengaksesnya dengan nama file mereka seperti ini:

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

Tampaknya, Katalog Aset tidak mereferensikan ekstensi, jadi apakah akan lebih efisien untuk mengaksesnya tanpa ".png"?

Alasan saya meminta alih-alih menguji diri saya sendiri adalah bahwa bahkan setelah menghapus aset dan Katalog Aset saya, lalu membersihkan folder build, saya masih dapat mengakses aset saya di aplikasi saya. Ini mencegah saya untuk menguji Katalog Aset, ketika saya menerapkannya.

Setelah melihat-lihat Katalog Aset, saya menemukan "Contents.json" untuk setiap aset dan diformat seperti ini:

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

Saya masih tidak yakin bagaimana saya harus mengaksesnya, tetapi mungkin ini akan membantu?

Jawaban:


138

Untuk mengakses gambar dari Katalog Aset, Anda hanya perlu mengakses nama grup aset tanpa ekstensi apa pun.

Jadi, jika Anda menambahkan gambar dengan nama @"my-button@2x.png"ke Katalog Aset, itu akan membuat grup aset bernama my-button.

Sekarang, yang harus Anda lakukan adalah mengakses gambar seperti ini:

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

Selain itu, Anda dapat mengedit grup aset dengan mengganti namanya (tanpa mengganti nama gambar) atau mengubah komponen individualnya. Ini akan memungkinkan Anda untuk mengikuti konvensi penamaan yang lebih mudah serta menunjukkan aset yang sangat berbeda UIScreen scaledi antara berbagai tanpa scalepemeriksaan.

Untuk menggabungkan gambar untuk ukuran perangkat yang berbeda, Anda mungkin perlu mengubahnya di bawah subpos "Perangkat" di opsi Grup Katalog Aset. Berikut adalah contoh toggle itu (tersedia dengan mengklik kanan grup).


Versi R4, yaitu dukungan 568, ada di sana. Jika Anda melihat atribut kumpulan gambar, Anda dapat memilih 'Perangkat Tertentu' dari menu tarik-turun Perangkat, kemudian Anda dapat menambahkan gambar R4, yang akan muncul di perangkat 4 "yang menjalankan iOS 7.
bandejapaisa

Apakah ada cara untuk mengakses informasi pemotongan secara terprogram? Selain mendapatkan properti capInsets dari objek UIImage?
Klaas

@Klaas Saya tidak yakin mengapa Anda perlu mendapatkannya dengan cara lain selain UIImage. Dan dari apa yang saya lihat, tidak, karena setiap Gambar Kategori dalam Grup bisa jadi gambar yang sama sekali berbeda, jadi tidak akan ada informasi umum, seperti pemotongan, yang tersedia. Atau apakah saya melewatkan sesuatu?
RileyE

@RileyE Saya perlu melakukan beberapa kalkulasi untuk tampilan overlay kustom dan ingin menggunakan insets yang sama. Ketika saya hanya perlu membuat UIImage untuk perhitungan saya, saya lebih suka menyimpan nilai yang dibutuhkan di tempat lain (dan berlebihan).
Klaas

1
Kode Swift tampaknya diubah menjadiUIImage(named: imageName)
HKTonyLee

26

Juga Apple telah menambahkan cara baru untuk mendapatkan gambar dari aset dengan Swift 3, Ini disebut sebagai 'Image Literal' dan berfungsi seperti di bawah ini:

Gambar Literal


5

Cepat

Anda bisa mendapatkan referensi ke gambar di katelog aset Anda dengan

UIImage(named: "myImageName")

Anda tidak perlu menyertakan ekstensi.


1

@RileyE 100% benar. Namun, dari pengalaman saya, perlu juga dicatat bahwa terkadang referensi katalog aset untuk gambar dapat berisi spasi kosong. Anda mungkin tidak akan menyadari jika menggunakan storyboard / xibs karena pelengkapan otomatis akan menambahkannya. Tetapi ketika Anda mereferensikannya dari kode, tidak begitu jelas apa masalahnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.