2014-09-08 9 views

cevap

7

Normalde, yapmanız gerekmeyecek. Bunun yerine, bir varlık kataloğu kullanacaksınız. UIImageAsset, iOS 8'de, varlık kataloglarındaki görüntü kümelerinin altında yatan mekanizmadır. Örneğin, iOS 8'de, bir varlık kataloğu, farklı boyut sınıfı olasılıklarını belirtmek için Genişlik ve Yükseklik açılır menüler kullanılarak farklı boyut sınıfı durumları için tasarlanan bir görüntünün sürümleri arasında ayrım yapabilir. Ardından, arayüzünüzdeki bir varlık kataloğundan bir görüntü kullandığınızda, doğru şey otomatik olarak gerçekleşir. Uygulamayı yatay yönlendirmeye döndüren bir iPhone'daysak ve görüntü kümesinde Her ikisi de Yükseklik ve Kompakt yükseklik alternatifi varsa, Kompakt yükseklik sürümü kullanılır. Ve bu özellikler canlı; Uygulamanın manzara portre döner ve herhangi yükseklik ve görüntü kümesindeki bir Kompakt yükseklik alternatifi hem bir varsa, Kompakt yükseklik versiyonu Arayüzünüze Herhangi bir yükseklik sürümü, otomatik ile değiştirilir olduğunu.

UIImageAsset'ten bahsetmediğimi fark edersiniz. Ancak, UIImageAsset temel mekanizmadır. Bir resim, init(named:) aracılığıyla bir varlık kataloğundan çıkarıldığında ve görüntü kümesinin adı, imageAsset özelliğinin bir UIImageAsset olmasıdır. Bu görüntü kümesindeki tüm görüntüler UIImageAsset aracılığıyla kullanılabilir; Her görüntünün onunla ilişkili bir özellik koleksiyonu vardır (traitCollection) ve imageWithTraitCollection:'u arayarak belirli bir özellik koleksiyonuna uygun görüntü için UIImageAsset'i sorabilirsiniz. Bu aslında, arayüzün sizin için ne yaptığıdır. Görüntüyü görüntüleyebilen bir arayüz nesnesi, iOS 8'de otomatik olarak koleksiyondan haberdar olur; traitCollectionDidChange: mesajını alır ve buna göre cevap verir.

Ancak, kendi UIImageAsset içine görüntüleri birleştirmek için da mümkündür. Bir şekilde, bu kodda bir varlık kataloğu (veya en azından bir görüntü seti) yapmak gibidir! Bu örnekte, uygulama demetinden iki görüntü getireceğim ve bunları uygulama dikey yönde iken ve diğeri uygulama yatay yönlendirme olduğunda otomatik olarak kullanılacak şekilde bunları yapılandıracağım:

let tcdisp = UITraitCollection(displayScale: UIScreen.mainScreen().scale) 
let tcphone = UITraitCollection(userInterfaceIdiom: .Phone) 
let tcreg = UITraitCollection(verticalSizeClass: .Regular) 
let tc1 = UITraitCollection(traitsFromCollections: [tcdisp, tcphone, tcreg]) 
let tccom = UITraitCollection(verticalSizeClass: .Compact) 
let tc2 = UITraitCollection(traitsFromCollections: [tcdisp, tcphone, tccom]) 
let moods = UIImageAsset() 
let frowney = UIImage(named:"frowney") 
let smiley = UIImage(named:"smiley") 
moods.registerImage(frowney, withTraitCollection: tc1) 
moods.registerImage(smiley, withTraitCollection: tc2) 
Örneğin, kendi görüntü olarak ya da bir UIButton en görüntü olarak atayarak UIImageView için teslim ile - - bu otomatik dönüşümlü smiley ile uygulama yönünü değiştirdiğinde frowney arayüzüne yerleştirilmiş ise Bundan sonra

.

dikkat çekici şey, smileyfrowney hiçbir kalıcı referanstır veya UIImageAsset (moods) rağmen bu sihirli çalışmasıdır. nedeni frowney ve smiley (çünkü init(named:) için çağrı) sistem tarafından önbelleğe olmasıdır ve her biri kayıtlı oldukları ile UIImageAsset güçlü bir başvuru korumak.

+1

Mükemmel expanation! – seeker12