UIView पर अल्फा सेट करना अल्फा को उसके सबव्यू पर सेट करता है जो नहीं होना चाहिए


86

के लिए प्रलेखन के अनुसार UIVIew @property(nonatomic) CGFloat alpha

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

मेरे पास एक कंटेनर दृश्य इस प्रकार कॉन्फ़िगर किया गया है:

self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];

और फिर 'myView' में साक्षात्कार जोड़ें

[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected

लेकिन 'अन्य दृश्य ' में स्क्रीन पर अल्फा है (यह अपेक्षा के अनुसार अपारदर्शी नहीं है)

यह कैसे हो सकता है और क्या किया जा सकता है?


हो सकता है कि साक्षात्कार जोड़ने और अल्फा स्थापित करने का क्रम महत्वपूर्ण हो। विभिन्न दृश्यों के साथ खेलने की कोशिश करें।
जोरिड

एक और दृश्य के निर्माण के सभी कोड जोड़ें :) और मुझे भी लगता है कि यह टाइपो है, लेकिन क्या आप सुनिश्चित हैं कि आप प्रारंभ करें self.myView? और एक और दृश्य जैसे[self.self addSubview:self.myView];
iPatel

1
वास्तव में, दस्तावेज़ीकरण सही है: जो इसके एम्बेडेड उप - साक्षात्कारों को प्रभावित नहीं करेगा और साक्षात्कारों के अल्फ़ा हमेशा समान होते हैं - लेकिन प्रदान किए गए विचारों का एक alphaमूल्य होता है जो सभी साक्षात्कारों के alphaमूल्यों को गुणा करता है। यदि जैसे subviews अल्फा 0.8और superview के अल्फा था 1.0, लेकिन आप के लिए इसे बदल 0.6, subviews अल्फा अभी भी एक ही है 0.8। रेंडर किए गए सबव्यू के अल्फा वैल्यू को केवल से बदला 0.8जाता है 0.48
हूलेक्स

जवाबों:


117

मुझे लगता है कि यह प्रलेखन में एक बग है। आपको Bugreport.apple.com पर इसे दर्ज करना चाहिए।

सब कुछ मैं त्वरित शोध के बाद देख सकता हूं कि आप जो देख रहे हैं वह यह बताता है कि यह हमेशा कैसे व्यवहार किया गया है, और मेरा स्वयं का परीक्षण भी इसे दिखाता है।

किसी दृश्य का अल्फ़ा सभी साक्षात्कारों पर लागू होता है।

शायद आप सभी की जरूरत है, [[UIColor blackColor] colorWithAlphaComponent:0.5]लेकिन अगर आप एक बच्चे के बजाय एक भाई बहन दृश्य बनाने की जरूरत नहीं होगी।


21
+1। FWIW, मुझे लगता है कि डॉक्स यकीनन सही हैं, अगर बेहद अस्पष्ट (सभी व्यावहारिक उद्देश्यों के लिए गलत होने की बात)। सबव्यू का अल्फ़ा प्रभावित होता है, लेकिन अल्फ़ा मान का नहीं। यह वही व्यवहार है, जो मुझे लगता है, छिपी हुई संपत्ति के लिए। छिपे हुए छुपाएँ सेट करना, लेकिन सबव्यू छिपा संपत्ति सेट करने का कारण नहीं बनता है।
ब्योर्न रोश

2
मुझे uipopover जैसी किसी चीज़ को देखने की आवश्यकता थी, लेकिन iphone में। मुझे [[UIColor blackColor] colorWithAlphaComponent: 0.5] के साथ एक uiviewcontroller बनाना होगा। यह काम किया है।
आलोक

2
मेरा मानना ​​है कि डॉक्स "यकीनन सही" हैं। वास्तविक दुनिया में, देवता डॉक्स पढ़ेंगे और मानते हैं कि बाल अल्फ़ाज़ अप्रभावित हैं। जब वास्तव में, कंपोजिट परिणाम ऐसा होगा जैसे कि अल्फ़ाज़ संशोधित किए गए थे। यह सिर्फ खराब प्रलेखन का मामला है।
वोमबेल

43

पैरेंट दृश्य पर सीधे अल्फा सेट न करें। इसके बजाय कोड की निचली पंक्ति का उपयोग करें जो अपने बच्चे के विचारों को प्रभावित किए बिना पैरेंटव्यू के लिए पारदर्शिता लागू करेगा।

[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0.5%];


यह कोड नवीनतम ios और xcode के साथ काम नहीं कर रहा है। किसी के पास अलग-अलग विचार हैं?
मोक्षार्थ

1
अति उत्कृष्ट!! स्विफ्ट 4 उपयोग के लिए: parentView.backgroundColor = UIColor.black.withAlphaComponent (0.5)
राकेश येम्बरम

महान समाधान।
लीलर

27

स्विफ्ट में

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)

स्विफ्ट 3 के लिए अद्यतन

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)

2
यह पूछे गए प्रश्न को संबोधित नहीं करता है।
डेविड बेरी

यह मुझे एक त्रुटि देता है: "मूल्य का प्रकार 'UIColor' का कोई सदस्य नहीं है 'colorWlAlphaComponent'"।
Krivvenz

1
नमस्कार @Krivvenz, 'colorWithAlphaComponent' का नाम बदलकर 'withAlphaComponent' कर दिया गया है। मेरा संपादित उत्तर देखें।
नाजारी स्टैडनीत्स्की

यह कोड काम नहीं कर रहा है। हम पुश किए गए दृश्य को पारदर्शी नहीं देख सकते हैं। किसी को भी किसी भी अन्य विचार है?
मोक्षार्थ

21

अल्फा के बजाय पृष्ठभूमि रंग की अस्पष्टता सेट करें, यह उसके बच्चे के विचारों को प्रभावित नहीं करेगा।

  1. दृश्य चुनें।
  2. पृष्ठभूमि के रंग की तुलना में विशेषता निरीक्षक पर जाएं
  3. "अन्य" पर क्लिक करें
  4. अपारदर्शिता 30% पर सेट करें

या आप प्रोग्राम करके सेट कर सकते हैं

var customView:UIView = UIView()
customView.layer.opacity = 0.3

बस। हैप्पी कोडिंग !!!


क्या इस कार्यक्रम को करने का कोई तरीका है?
DCIndieDev

@DCIndieDev क्षमा करें, मुझे UIView की संपत्ति के रूप में अपारदर्शिता नहीं मिली है। तो स्टोरीबोर्ड द्वारा सेट करें।
MRizwan33

यह एक बेहतरीन जवाब है। बढ़िया काम किया।
जो सुसनिक

यह स्वीकृत उत्तर होना चाहिए, आवश्यकतानुसार काम किया जाना चाहिए। धन्यवाद।
मिस्सा

1
@ MRizwan33 आप [अपने UIView] से अपारदर्शिता संपत्ति का उपयोग कर सकते हैं। लेयर.ओपेसिटी
Missa

16

यदि आप स्टोरीबोर्ड पसंद करते हैं, तो User Defined Runtime Attributeअपने दृश्य के लिए यहां क्लिक करें Identity Inspector:

Key Path: backgroundColor, Type: Color, Value:अस्पष्टता 50% के साथ सफेद रंग जैसे।


बहुत बढ़िया जवाब! एट्रिब्यूट्स इंस्पेक्टर में मैंने व्यू का अल्फ़ा सेट किया। आइडेंटिटी इंस्पेक्टर में मैं 50% से ऊपर के रूप में मुख्य पथ सम्मिलित करता हूं। दृश्य की अपारदर्शिता अब 50% है, लेकिन उप-विषयों की अस्पष्टता अभी भी 100% है। मुझे लगता है कि अल्फा और अपारदर्शिता एक समान नहीं हैं।
etayluz

6

चर्चा के अनुसार सबसे सरल समाधान अल्फा को इस प्रकार बदलना है: Xcode 8 Swift 3 के लिए अद्यतित संस्करण है:

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)

उद्देश्य सी:

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];

यहां Apple डेवलपर डॉक्स देखें: https://developer.apple.com/reference/uikit/uiview/1622417-alpha


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

संभवतया आपके pPententView के पीछे का दृश्य ठोस काला होना चाहिए कृपया अपने स्टोरीबोर्ड को xib और अपने कोड की जांच करें कि क्या यह किसी और से काले रंग में सेट है या नहीं। आशा है कि यह मदद करता है
अंकित कुमार गुप्ता

मैं सिर्फ एक दृश्य से दूसरे दृश्य को आगे बढ़ा रहा हूं। इस कोड के बाद धकेल दिया गया दृश्य पारदर्शी दिखाई देगा। मैंने पहले भी कई बार इसका इस्तेमाल किया है। यह इस के रूप में सरल है। -> सेटिंग्स * सेट = [[सेटिंग्स आवंटित] initWithNibName: @ "सेटिंग्स" बंडल: नील]; -> set.view.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent: 0.3f]; -> [self.navigationController pushViewController: सेट एनिमेटेड: YES];
मोक्षार्थ

क्या आप xib या स्टोरीबोर्ड का उपयोग कर रहे हैं?
अंकित कुमार गुप्ता

लेकिन अब मैं इस कोड का उपयोग कर रहा हूं और यह काम नहीं कर रहा है। धक्का दिया दृश्य ठोस रंग के साथ दिखाई देगा जो भी रंग हमने दिया है, और पारदर्शी नहीं है।
मोक्षार्थ

4

स्विफ्ट 4.2 और एक्सकोड 10.1 में

स्टोरीबोर्ड के माध्यम से रंग और अल्फा मान न जोड़ें। इस मामले में केवल प्रोग्रामेटिक दृष्टिकोण काम करेगा।

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

@ आईओएस थैंक यू, इसने मेरी मदद की।
रघुराम

2

यहाँ थोड़ा जटिल समाधान है:

UIView *container;
UIView *myView;
UIView *anotherView;

myView.alpha = 0.5;
[container addSubview:myView];

anotherView.alpha = 1;
[container addSubview:anotherView];

containerपर्यवेक्षण के रूप में एक दृश्य का उपयोग करें , anotherViewऔर myViewदोनों सबव्यू हैं container, anotherViewमें एक सबव्यू नहीं है myView


2

अभी के लिए माता-पिता के दृश्य को पारदर्शी बनाने का केवल एक ही तरीका है और किसी भी बच्चे के विचार को अंदर मत डालें (माता-पिता के विचार के अनुसार कोई विचार मत डालें), उस बच्चे के विचारों को माता-पिता के विचार से बाहर रखें। पैरेंट व्यू को पारदर्शी बनाने के लिए आप स्टोरीबोर्ड के माध्यम से ऐसा कर सकते हैं।

//Transparent the parentView

parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)

दूसरे दृश्य को पैरेंट व्यू के बाहर रखें। यह आकर्षण की तरह काम करेगा।


0

कृपया Xcode प्रलेखन से साहसिक विवरण देखें।

इस संपत्ति का मान 0.0 से 1.0 की सीमा में एक फ्लोटिंग-पॉइंट संख्या है, जहां 0.0 पूरी तरह से पारदर्शी का प्रतिनिधित्व करता है और 1.0 पूरी तरह से अपारदर्शी का प्रतिनिधित्व करता है। इस संपत्ति के मूल्य को बदलने से केवल वर्तमान दृश्य के अल्फा मान को अद्यतन किया जाता है। हालाँकि, उस अल्फ़ा मान द्वारा प्रदान की जाने वाली पारदर्शिता दृश्य के सभी सामग्रियों को प्रभावित करती है, जिसमें उसके साक्षात्कार भी शामिल हैं। उदाहरण के लिए, 1.0 के अल्फा मान के साथ एक सबव्यू, जो 0.5 के अल्फा मान के साथ एक मूल दृश्य में एम्बेडेड है, ऑनस्क्रीन प्रकट होता है जैसे कि इसका अल्फा मान भी 0.5 है।

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