पहुँच एसेट कैटलॉग प्रोग्रामेटिक रूप से


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 scale किसी भी scaleचेक के बिना एस के ।

विभिन्न डिवाइस आकारों के लिए छवियों को शामिल करने के लिए, आपको एसेट कैटलॉग समूह के विकल्पों में "डिवाइसेस" के तहत इसे टॉगल करने की आवश्यकता हो सकती है। यहां उस टॉगल का उदाहरण दिया गया है (समूह पर राइट क्लिक करके उपलब्ध है)।


आर 4 संस्करण, यानी 568 समर्थन है। यदि आप एक छवि सेट की विशेषताओं को देखते हैं, तो आप डिवाइस ड्रॉप डाउन से 'डिवाइस स्पेसिफिक' का चयन कर सकते हैं, और फिर आप एक आर 4 इमेज को जोड़ सकते हैं, जो आईओएस 7 पर चलने वाले 4 "डिवाइसेस पर दिखाई देगा।
bandejapaisa

क्या प्रोग्रामिंग की स्लाइसिंग जानकारी तक पहुँचने का कोई तरीका है? UIImage ऑब्जेक्ट से capInsets संपत्ति प्राप्त करने के अलावा?
कालस

@Klaas मुझे यकीन नहीं है कि आपको इसे किसी अन्य माध्यम से प्राप्त करने की आवश्यकता क्यों होगी UIImage। और जो मैंने देखा है, उससे नहीं, क्योंकि समूह में प्रत्येक श्रेणी की छवि एक पूरी तरह से अलग छवि हो सकती है, इसलिए कोई सामान्य जानकारी नहीं होगी, जैसे कि टुकड़ा करना, उपलब्ध। या क्या मैं कुछ न कुछ भूल रहा हूं?
रिले

@ रिले मुझे एक कस्टम ओवरले दृश्य के लिए कुछ गणना करने की आवश्यकता है और उसी इनसेट का उपयोग करना चाहते हैं। जब मुझे अपनी गणना के लिए पूरी तरह से एक UIImage बनाना होगा तो मैं आवश्यक मूल्य को कहीं और (और निरर्थक) संग्रहीत करना पसंद करूंगा।
कालस

1
स्विफ्ट कोड को बदल दिया गया हैUIImage(named: imageName)
HKTonyLee

26

इसके अलावा Apple ने स्विफ्ट 3 के साथ परिसंपत्तियों से छवि प्राप्त करने के लिए नया तरीका जोड़ा है, इसे 'इमेज लिटरल' कहा जा रहा है और नीचे दिए गए तरीके से काम करें:

छवि शाब्दिक


5

तीव्र

आप अपने एसेट कैटेलॉग में एक छवि का संदर्भ प्राप्त कर सकते हैं

UIImage(named: "myImageName")

आपको एक्सटेंशन शामिल करने की आवश्यकता नहीं है।


1

@ रिले 100% सही है। हालांकि, मेरे अनुभवों से यह भी ध्यान देने योग्य है कि कभी-कभी छवि के लिए परिसंपत्ति सूची संदर्भ में सफेद स्थान पीछे हो सकता है। यदि संभव हो तो स्टोरीबोर्ड / xibs का उपयोग करते समय आप ध्यान नहीं देंगे क्योंकि ऑटो पूरा जोड़ देगा। लेकिन जब आप इसे कोड से संदर्भित करते हैं तो यह स्पष्ट नहीं होता है कि समस्या क्या है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.