2014-09-08 19 views
6

आईओएस 8 में UIImageAsset बनाने और उपयोग करने का उपयोग कैसे करें IOS 8 एक विधि registerImage:withTraitCollection: के साथ एक UIImageAsset क्लास प्रस्तुत करता है। मैं इस वर्ग का उपयोग कैसे करूं?आईओएस 8

उत्तर

7

आम तौर पर, आपको नहीं करना होगा। इसके बजाय, आप एक संपत्ति सूची का उपयोग करेंगे। आईआईएम 8 में UIImageAsset, बस संपत्ति कैटलॉग में छवि सेट अंतर्निहित तंत्र है।

उदाहरण के लिए, आईओएस 8 में, एक संपत्ति कैटलॉग विभिन्न आकार वर्ग स्थितियों को निर्दिष्ट करने के लिए चौड़ाई और ऊंचाई पॉप-अप मेनू का उपयोग करके विभिन्न आकार वर्ग स्थितियों के लिए इच्छित छवि के संस्करणों के बीच अंतर कर सकता है। फिर, जब आप अपने इंटरफ़ेस में किसी संपत्ति कैटलॉग से किसी छवि का उपयोग करते हैं, तो सही चीज स्वचालित रूप से होती है। यदि हम ऐप के साथ एक आईफोन पर हैं जो परिदृश्य अभिविन्यास पर घूमते हैं, और यदि छवि सेट में कोई ऊंचाई और कॉम्पैक्ट ऊंचाई विकल्प दोनों हैं, तो कॉम्पैक्ट ऊंचाई संस्करण का उपयोग किया जाता है। और ये विशेषताएं लाइव हैं; यदि ऐप परिदृश्य से पोर्ट्रेट तक घूमता है, और छवि सेट में कोई भी ऊंचाई और कॉम्पैक्ट ऊंचाई विकल्प दोनों है, तो कॉम्पैक्ट ऊंचाई संस्करण को आपके इंटरफ़ेस में किसी भी ऊंचाई संस्करण के साथ बदल दिया गया है, स्वचालित रूप से

आप देखेंगे कि मैंने UIImageAsset का उल्लेख नहीं किया है। हालांकि, UIImageAsset अंतर्निहित तंत्र है। जब init(named:) के माध्यम से किसी संपत्ति कैटलॉग से एक छवि निकाली जाती है और इसकी छवि सेट का नाम होता है, तो इसकी imageAsset संपत्ति UIImageAsset है। उस छवि सेट की सभी छवियां UIImageAsset के माध्यम से उपलब्ध हैं; प्रत्येक छवि में इसके साथ जुड़े एक विशेषता संग्रह (इसके traitCollection) हैं, और आप imageWithTraitCollection: पर कॉल करके किसी विशेष विशेषता संग्रह के लिए उपयुक्त छवि के लिए UIImageAsset से पूछ सकते हैं। वास्तव में, वास्तव में इंटरफ़ेस आपके लिए क्या कर रहा है। एक इंटरफ़ेस ऑब्जेक्ट जो एक छवि प्रदर्शित कर सकता है स्वचालित रूप से आईओएस 8 में संग्रह-जागरूकता का पता लगाता है; यह traitCollectionDidChange: संदेश प्राप्त करता है और तदनुसार जवाब देता है।

हालांकि, यह है जो छवियों को अपने स्वयं के UIImageAsset में जोड़ना संभव है। एक तरह से, यह कोड में एक संपत्ति सूची (या कम से कम एक छवि सेट) बनाने की तरह है! इस उदाहरण में, मैं ऐप बंडल से दो छवियां प्राप्त करूंगा, और उन्हें कॉन्फ़िगर करूँगा ताकि ऐप पोर्ट्रेट ओरिएंटेशन में होता है और दूसरा ऐप लैंडस्केप ओरिएंटेशन में उपयोग किया जाता है, तो स्वचालित रूप से उपयोग किया जाता है:

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) 

उसके बाद, अगर frowney इंटरफेस में रखा जाता है - smiley साथ स्वचालित रूप से विकल्पों यह जब एप्लिकेशन उन्मुखीकरण बदलता है - उदाहरण के लिए एक UIImageView करने के लिए इसे सौंपने अपनी छवि के रूप में, या एक UIButton की छवि के रूप में यह बताए द्वारा द्वारा।

उल्लेखनीय बात यह है कि इस जादू काम करता है भले ही frowney करने के लिए कोई लगातार संदर्भ है, smiley, या UIImageAsset (moods) है। इसका कारण यह है कि frowney और smiley सिस्टम द्वारा कैश किए जाते हैं (init(named:) पर कॉल के कारण), और वे प्रत्येक UIImageAsset के लिए एक मजबूत संदर्भ बनाए रखते हैं जिसके साथ वे पंजीकृत हैं।

+1

उत्कृष्ट विस्तार! – seeker12