2012-01-16 18 views
6

विचार प्रगति संवाद दिखाने के लिए है। मैं एक पारदर्शी काला दृश्य (अल्फा 0.2) के साथ एक मूल दृश्य (आमतौर पर पूरी स्क्रीन) को कवर करने का प्रयास कर रहा हूं। इसके ऊपर मैं एक छोटा सा दृश्य दिखाना चाहता हूं, एक और रंग के साथ पारदर्शी भी दिखाना चाहता हूं। यह पहले दृश्य की रंग या पारदर्शिता से प्रभावित नहीं हो सकता है। उस दूसरे दृश्य में मैं यूआई तत्व चाहता हूं जो अपारदर्शी हैं। मैंने सब कुछ करने की कोशिश की है और यहां तक ​​कि यहां पोस्ट भी मिली हैं जो कुछ समान से निपटती हैं लेकिन केवल एक पारदर्शी परत का उपयोग करती हैं। और वे पहले से ही अजीब चाल का उपयोग करते हैं। क्या यह प्राप्त करने का एक मानक, आसान तरीका है?गैर पारदर्शी सामग्री के साथ एक और पारदर्शी UIView पर पारदर्शी दृश्य?

उत्तर

3

मैं एक ब्लॉग में एक जवाब मिला: http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

समाधान drawRect: ओवरराइड और उस में अल्फा का ख्याल रखना है। आप UIView's अल्फा संपत्ति को स्पर्श नहीं कर सकते हैं, न ही आप दृश्य के पृष्ठभूमि रंग को पारदर्शी लेकिन कुछ भी सेट कर सकते हैं। सभी ड्राइंग drawRect:. में बनाई जानी चाहिए इस तरह मैं पारदर्शी विचारों को ढेर करने और शीर्ष पर अपारदर्शी तत्व डालने में सक्षम था।

1

पारदर्शी दृश्य के सबव्यूव के रूप में अपना अपारदर्शी दृश्य जोड़ना काम नहीं करेगा। मैंने अतीत में जो किया है, उसके पास UIView वर्ग है जो अर्ध-पारदर्शी सबव्यू और एक अपारदर्शी सबव्यू जोड़ता है। इस तरह पारदर्शी दृश्य अपारदर्शी को प्रभावित नहीं करेगा।

9

किसी भी चारों ओर हैकिंग या जटिल और संभवतः धीमी गति से कस्टम drawRect: के बिना, यह संभव है यदि आप समूह अपने विचार:

बाउंडिंग राय यह है कि शामिल हैं और पूरे संवाद रखती है बनाएँ। इस दृश्य में स्वयं कोई दृश्य सामग्री नहीं है, और इसकी पृष्ठभूमि रंग स्पष्ट है। इसका अल्फा 1.0 है।

अब सभी पारदर्शी विचार जोड़ें (अल्फा < 1 वाले) जो आप चाहते हैं, और गैर-पारदर्शी दृश्य भी जोड़ें। सावधान रहें कि पारदर्शी लोगों के सबव्यूज़ के रूप में कोई भी पारदर्शी विचार न जोड़ना, इसके बजाय उन्हें बाध्यकारी दृश्य के प्रत्यक्ष सबव्यू के रूप में जोड़ें। इस तरह, वे 1.0 के अल्फा का उत्तराधिकारी होंगे।

UIView *progressDialogView = [[UIView alloc] initWithFrame:dialogFrame]; 
progressDialogView.backgroundColor = [UIColor clearColor]; 
progressDialogView.alpha = 1.0; //you can leave this line out, since this is the default. 

UIView *halfTransparentBackgroundView = [[UIView alloc] initWithFrame:dialogFrame]; 
halfTransparentBackgroundView.backgroundColor = [UIColor blackColor]; //or whatever... 
halfTransparentBackgroundView.alpha = 0.5; 
[progressDialogView addSubview: halfTransparentBackgroundView]; 

UIView *progressBarView = [[UIView alloc] initWithFrame:progressBarFrame]; 
progressBarView.backgroundColor = [UIColor blueColor]; 
[progressDialogView addSubview: progressBarView]; 
+0

मुझे पता है कि "चाल"। लेकिन यदि आप अधिक पारदर्शी दृश्य के शीर्ष पर अर्द्ध पारदर्शी दृश्य और अपारदर्शी सभी के शीर्ष पर बटन चाहते हैं तो यह मुश्किल हो जाता है। इसलिए मैं उस ब्लॉग में मिले कोड से खुश हूं जिसे मैंने अपने उत्तर में संदर्भित किया था। यह अल्फा मान का बिल्कुल उपयोग नहीं करता है। – Krumelur

+2

यह जटिल कैसे हो जाता है? मुझे लगता है कि इस तरह यह बहुत साफ और समझने में आसान रहता है। – fzwo

+0

इस तरह से जटिल है कि आपको हमेशा शीर्ष पर गैर-पारदर्शी सामग्री वाले एक पारदर्शी होने के लिए दो विचारों की आवश्यकता होगी। यही कारण है कि मैं अन्य समाधान पसंद करते हैं। – Krumelur

5

इसके बजाय अल्फा संपत्ति की स्थापना की, प्रत्येक दृश्य के लिए पृष्ठभूमि रंग/अस्पष्टता की स्थापना के लिए निम्नलिखित का उपयोग करें:

view1.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:.3]; 

उपयोग जो कुछ भी आप लाल, हरे, नीले, और अल्फा के लिए इच्छा महत्व देता है।

2

मुझे किसी अन्य दृश्य के शीर्ष पर पारदर्शी दृश्य होना आवश्यक था। दृश्य पारदर्शी मैं बस किया था बनाने के लिए:

self.alpha = 0.5; 

उदाहरण के लिए:

- (void) configureView 
{ 
    self.frame = CGRectMake(0, 0, 640, 960); 
    self.backgroundColor = [UIColor greyColor]; 
    self.alpha = 0.5; 
} 
संबंधित मुद्दे