Varlık Kataloğuna programlı olarak erişin


97

Bunun yeni bir özellik olduğunu biliyorum ve bu mümkün olmayabilir, ancak varlıklarımı düzenlemek için bir Varlık Kataloğu kullanmayı çok isterim, ancak tüm görüntülerime programlı olarak erişiyorum. Resimlerime şimdi nasıl erişebilirim? Onlara hala şu şekilde dosya adlarıyla erişiyor muyum:

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

Görünüşe göre, Varlık Kataloğu uzantıya başvurmuyor, bu nedenle ".png" olmadan ona erişmek daha verimli olur mu?

Kendim için test yapmak yerine sormamın nedeni, varlıklarımı ve Varlık Kataloğumu kaldırdıktan sonra, yapı klasörünü temizledikten sonra bile, uygulamamdaki varlıklarıma hala erişebilirim. Bu, onu uyguladığımda Varlık Kataloğunu test etmemi engelliyor.

Öğe Kataloğunu inceledikten sonra, her varlık için "Contents.json" dosyasını buldum ve şu şekilde biçimlendirildi:

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

Hala nasıl erişmem gerektiğinden emin değilim, ama belki bu yardımcı olur?

Yanıtlar:


139

Görüntüye Varlık Kataloğu'ndan erişmek için, herhangi bir uzantı olmadan yalnızca varlık grubunun adına erişmeniz gerekir.

Dolayısıyla, @"my-button@2x.png"Varlık Kataloğuna adlı bir görüntü eklerseniz, adlı bir varlık grubu oluşturacaktır my-button.

Şimdi, tek yapmanız gereken resme şu şekilde erişmek:

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

Ayrıca, varlık grubunu yeniden adlandırarak (görüntüleri yeniden adlandırmadan) veya tek tek bileşenlerini değiştirerek düzenleyebilirsiniz. Bu, daha kolay adlandırma kurallarını takip etmenize ve UIScreen scaleherhangi bir scalekontrol olmaksızın farklı URL'ler arasında tamamen farklı varlıkları göstermenize olanak tanır .

Farklı cihaz boyutları için görüntüleri dahil etmek için, Varlık Kataloğu Grubu seçeneklerinde "Cihazlar" alt başlığı altında geçiş yapmanız gerekebilir. İşte bu geçişin bir örneği (gruba sağ tıklayarak ulaşılabilir).


R4 sürümleri, yani 568 desteği var. Bir görüntü kümesinin özniteliklerini görüntülerseniz, Aygıtlar açılır
listesinden 'Aygıta Özel'i

Dilimleme bilgilerine programlı olarak erişmenin herhangi bir yolu var mı? UIImage nesnesinden capInsets özelliğini almanın yanı sıra?
Klaas

@Klaas Bunu neden UIImage. Ve gördüğüm kadarıyla, hayır, Gruptaki her Kategori Görüntüsü tamamen farklı bir görüntü olabilir, bu nedenle dilimleme gibi herhangi bir genel bilgi mevcut olmayacaktır. Yoksa bir şey mi kaçırıyorum?
RileyE

@RileyE Özel bir bindirme görünümü için bazı hesaplamalar yapmam gerekiyor ve aynı ekleri kullanmak istiyorum. Hesaplamalarım için yalnızca bir UIImage oluşturmam gerektiğinde, gerekli değeri başka bir yerde (ve gereksiz) saklamayı tercih ederim.
Klaas

1
Swift kodu değiştirilebilir görünüyorUIImage(named: imageName)
HKTonyLee

27

Ayrıca Apple, Swift 3 ile varlıklardan görüntü almanın yeni bir yolunu ekledi, 'Image Literal' olarak adlandırıyor ve aşağıdaki gibi çalışıyor:

Görüntü Değişmez Değeri


5

Swift

Varlık kataloğunuzdaki bir görüntüye referans alabilirsiniz.

UIImage(named: "myImageName")

Uzantıyı eklemenize gerek yoktur.


1

@ RileyE% 100 haklı. Bununla birlikte, deneyimlerime göre, bazen görüntünün varlık kataloğu referansının sonunda beyaz boşluk içerebileceğini de belirtmek gerekir. Otomatik tamamlama ekleyeceği için film şeridi / xibs kullanıp kullanmayacağınızı muhtemelen fark etmezsiniz. Ancak koddan referans aldığınızda sorunun ne olduğu o kadar açık değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.