दिलचस्प पोस्ट
जब मेरी खोल स्क्रिप्ट निकल जाए तो मैं पृष्ठभूमि प्रक्रियाओं / नौकरियों को कैसे मारूं? Directory.GetFiles (…) का उपयोग करते समय पथ तक पहुंच अस्वीकृत है खोजने का उत्पादन कैप्चर करना -प्रिंट 0 एक बाश सरणी में JQuery में तत्व की कुल चौड़ाई (पैडिंग और सीमा सहित) प्रोफाइल क्या आप रेफल्स क्षुधा प्रोफाइल करने के लिए सिफारिश करते हैं? दस्तावेज़ के सापेक्ष तत्व की स्थिति ढूंढना वेबपेज से पायथन स्क्रिप्ट में JSON कैसे प्राप्त करें MySQLi ने बयान त्रुटि रिपोर्टिंग तैयार की नतीजतन फैक्ट्री पद्धति से परिणाम कैशिंग अगर यह फेंक नहीं करता है JSP के माध्यम से प्रदर्शन ब्लॉब (इमेज) रिलेशनल डेटाबेस में एक कैटलॉग और एक स्कीमा के बीच क्या अंतर है? एएसपी.नेट एमवीसी में एपीआई नियंत्रक और नियंत्रक के बीच का अंतर पायथन फ़ंक्शंस संदर्भ द्वारा कॉल करते हैं दशमलव प्रकार के लिए घोषणा प्रत्यय गीट पुश त्रुटि: चेक आउट की गई शाखा को अपडेट करने से मना कर दिया

मैं UIView के अंतर्गत एक छाया कैसे खींचना चाहूंगा?

मैं कोको टच में एक UIView के निचले किनारे के नीचे छाया आकर्षित करने की कोशिश कर रहा हूं। मैं समझता हूं कि छाया को आकर्षित करने के लिए मुझे CGContextSetShadow() छाया CGContextSetShadow() का उपयोग करना चाहिए, लेकिन क्वार्ट्ज 2 डी प्रोग्रामिंग गाइड थोड़ा अस्पष्ट है:

  1. ग्राफिक्स स्थिति सहेजें
  2. उचित मानों को पारित करते हुए, CGContextSetShadow फ़ंक्शन को कॉल करें।
  3. सभी चित्रण करें, जिसमें आप छाया को लागू करना चाहते हैं।
  4. ग्राफिक्स राज्य को पुनर्स्थापित करें

मैंने निम्न में UIView subclass की कोशिश की है:

 - (void)drawRect:(CGRect)rect { CGContextRef currentContext = UIGraphicsGetCurrentContext(); CGContextSaveGState(currentContext); CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5); CGContextRestoreGState(currentContext); [super drawRect: rect]; } 

..लेकिन यह मेरे लिए काम नहीं करता है और मैं थोड़ी देर के बारे में (एक) जहां अगले जाना है और (बी) अगर कुछ भी मुझे इस काम को करने के लिए मेरे UIView करने की आवश्यकता है?

Solutions Collecting From Web of "मैं UIView के अंतर्गत एक छाया कैसे खींचना चाहूंगा?"

आपके वर्तमान कोड में, आप मौजूदा संदर्भ के GState को बचा सकते हैं, इसे छाया आकर्षित करने के लिए कॉन्फ़िगर करें .. और इसे छायांकन करने के लिए इसे कॉन्फ़िगर करने से पहले इसे पुनर्स्थापित करें। फिर, आखिरकार, आप ड्राक्टेक्ट के सुपरक्लास के कार्यान्वयन का आह्वान करते हैं:।

किसी भी ड्राइंग को छाया की सेटिंग से प्रभावित होना चाहिए, उसके बाद होने चाहिए

 CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5); 

लेकिन पहले

 CGContextRestoreGState(currentContext); 

अतः यदि आप सुपरक्लास के drawRect: चाहते हैं drawRect: एक छाया में 'लिपटे' होने के बारे में, यदि आप इस तरह से अपना कोड पुन: व्यवस्थित करेंगे तो कैसे?

 - (void)drawRect:(CGRect)rect { CGContextRef currentContext = UIGraphicsGetCurrentContext(); CGContextSaveGState(currentContext); CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5); [super drawRect: rect]; CGContextRestoreGState(currentContext); } 

प्रारंभिक रूप से देखने के कुछ परत विशेषताओं को सेट करने के लिए एक आसान आसान तरीका है:

 self.layer.masksToBounds = NO; self.layer.shadowOffset = CGSizeMake(-15, 20); self.layer.shadowRadius = 5; self.layer.shadowOpacity = 0.5; 

आपको क्वार्ट्ज़कोर आयात करने की आवश्यकता है

 #import <QuartzCore/QuartzCore.h> 
 self.layer.masksToBounds = NO; self.layer.cornerRadius = 8; // if you like rounded corners self.layer.shadowOffset = CGSizeMake(-15, 20); self.layer.shadowRadius = 5; self.layer.shadowOpacity = 0.5; 

यह एप्लिकेशन धीमा कर देगा जब तक आपके दृश्य को आयताकार दिख रहा है, तब तक निम्न पंक्ति जोड़कर प्रदर्शन में सुधार हो सकता है:

 self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath; 

एक ही समाधान है, लेकिन सिर्फ आपको याद दिलाने के लिए: आप सीधे स्टोरीबोर्ड में छाया को परिभाषित कर सकते हैं।

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

यहां छवि विवरण दर्ज करें

आप यह कोशिश कर सकते हैं …. आप मूल्यों के साथ खेल सकते हैं। shadowRadius की मात्रा निर्धारित करता है। shadowOffset कि छाया कहाँ जाता है।

स्विफ्ट 2.0

 let radius: CGFloat = demoView.frame.width / 2.0 //change it to .height if you need spread for height let shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 2.1 * radius, height: demoView.frame.height)) //Change 2.1 to amount of spread you need and for height replace the code for height demoView.layer.cornerRadius = 2 demoView.layer.shadowColor = UIColor.blackColor().CGColor demoView.layer.shadowOffset = CGSize(width: 0.5, height: 0.4) //Here you control x and y demoView.layer.shadowOpacity = 0.5 demoView.layer.shadowRadius = 5.0 //Here your control your blur demoView.layer.masksToBounds = false demoView.layer.shadowPath = shadowPath.CGPath 

स्विफ्ट 3.0

 let radius: CGFloat = demoView.frame.width / 2.0 //change it to .height if you need spread for height let shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 2.1 * radius, height: demoView.frame.height)) //Change 2.1 to amount of spread you need and for height replace the code for height demoView.layer.cornerRadius = 2 demoView.layer.shadowColor = UIColor.black.cgColor demoView.layer.shadowOffset = CGSize(width: 0.5, height: 0.4) //Here you control x and y demoView.layer.shadowOpacity = 0.5 demoView.layer.shadowRadius = 5.0 //Here your control your blur demoView.layer.masksToBounds = false demoView.layer.shadowPath = shadowPath.cgPath 

प्रसार के साथ उदाहरण

प्रसार के साथ उदाहरण

एक बुनियादी छाया बनाने के लिए

  demoView.layer.cornerRadius = 2 demoView.layer.shadowColor = UIColor.blackColor().CGColor demoView.layer.shadowOffset = CGSizeMake(0.5, 4.0); //Here your control your spread demoView.layer.shadowOpacity = 0.5 demoView.layer.shadowRadius = 5.0 //Here your control your blur 

स्विफ्ट 2.0 में मूल छाया उदाहरण

आउटपुट

इंटरफ़ेस बिल्डर का उपयोग करके सरल और साफ समाधान

अपनी प्रोजेक्ट में फ़ाइल नामित करें (या बस किसी भी फाइल में पेस्ट करें):

 import UIKit @IBDesignable extension UIView { /* The color of the shadow. Defaults to opaque black. Colors created * from patterns are currently NOT supported. Animatable. */ @IBInspectable var shadowColor: UIColor? { set { layer.shadowColor = newValue!.CGColor } get { if let color = layer.shadowColor { return UIColor(CGColor:color) } else { return nil } } } /* The opacity of the shadow. Defaults to 0. Specifying a value outside the * [0,1] range will give undefined results. Animatable. */ @IBInspectable var shadowOpacity: Float { set { layer.shadowOpacity = newValue } get { return layer.shadowOpacity } } /* The shadow offset. Defaults to (0, -3). Animatable. */ @IBInspectable var shadowOffset: CGPoint { set { layer.shadowOffset = CGSize(width: newValue.x, height: newValue.y) } get { return CGPoint(x: layer.shadowOffset.width, y:layer.shadowOffset.height) } } /* The blur radius used to create the shadow. Defaults to 3. Animatable. */ @IBInspectable var shadowRadius: CGFloat { set { layer.shadowRadius = newValue } get { return layer.shadowRadius } } } 

फिर यह उपयोगिताओं पैनल में प्रत्येक दृश्य के लिए इंटरफ़ेस बिल्डर में उपलब्ध होगा> विशेषताएं इंस्पेक्टर:

उपयोगिताएँ पैनल

आप आसानी से अब छाया निर्धारित कर सकते हैं

टिप्पणियाँ:
– आईबी में छाया दिखाई नहीं देगी, केवल रनटाइम पर।
– के रूप में Mazen Kasser ने कहा

जिन लोगों को यह काम करने में विफल रहा है […] सुनिश्चित करें कि क्लिप सबव्यूज़ (क्लिप clipsToBounds ) सक्षम नहीं हैं

मैं इसे अपने utils के भाग के रूप में उपयोग करता हूँ इसके साथ हम केवल छाया ही नहीं रख सकते हैं बल्कि किसी भी UIView लिए एक गोल कॉर्नर भी प्राप्त कर सकते हैं। इसके अलावा आप जो रंग छाया चुनते हैं उसे सेट कर सकते हैं आम तौर पर काले रंग को पसंद किया जाता है लेकिन कभी-कभी, जब पृष्ठभूमि गैर-सफेद होती है, तो आप कुछ और चाहते हैं यहां मैं जो उपयोग करता हूं –

 in utils.m + (void)roundedLayer:(CALayer *)viewLayer radius:(float)r shadow:(BOOL)s { [viewLayer setMasksToBounds:YES]; [viewLayer setCornerRadius:r]; [viewLayer setBorderColor:[RGB(180, 180, 180) CGColor]]; [viewLayer setBorderWidth:1.0f]; if(s) { [viewLayer setShadowColor:[RGB(0, 0, 0) CGColor]]; [viewLayer setShadowOffset:CGSizeMake(0, 0)]; [viewLayer setShadowOpacity:1]; [viewLayer setShadowRadius:2.0]; } return; } 

इसका इस्तेमाल करने के लिए हमें इसे कॉल करने की ज़रूरत है – [utils roundedLayer:yourview.layer radius:5.0f shadow:YES];

स्विफ्ट 3

 extension UIView { func installShadow() { layer.cornerRadius = 2 layer.masksToBounds = false layer.shadowColor = UIColor.black.cgColor layer.shadowOffset = CGSize(width: 0, height: 1) layer.shadowOpacity = 0.45 layer.shadowPath = UIBezierPath(rect: bounds).cgPath layer.shadowRadius = 1.0 } } 

उन सभी के लिए जो इसे काम करने में असफल रहे (सभी के रूप में!) यहां सभी उत्तरों की कोशिश करने के बाद, बस सुनिश्चित करें कि क्लिप सबव्यूवेटिव इंटापिक्ट पर सक्षम नहीं है …

स्विफ्ट 3

 self.paddingView.layer.masksToBounds = false self.paddingView.layer.shadowOffset = CGSize(width: -15, height: 10) self.paddingView.layer.shadowRadius = 5 self.paddingView.layer.shadowOpacity = 0.5 

आप निम्न के रूप में छाया और कोने के त्रिज्या के लिए बनाई गई मेरी उपयोगिता फ़ंक्शन का उपयोग कर सकते हैं:

 - (void)addShadowWithRadius:(CGFloat)shadowRadius withShadowOpacity:(CGFloat)shadowOpacity withShadowOffset:(CGSize)shadowOffset withShadowColor:(UIColor *)shadowColor withCornerRadius:(CGFloat)cornerRadius withBorderColor:(UIColor *)borderColor withBorderWidth:(CGFloat)borderWidth forView:(UIView *)view{ // drop shadow [view.layer setShadowRadius:shadowRadius]; [view.layer setShadowOpacity:shadowOpacity]; [view.layer setShadowOffset:shadowOffset]; [view.layer setShadowColor:shadowColor.CGColor]; // border radius [view.layer setCornerRadius:cornerRadius]; // border [view.layer setBorderColor:borderColor.CGColor]; [view.layer setBorderWidth:borderWidth]; } 

आशा है इससे आपकी मदद होगी!!!

सभी सभी अच्छी तरह से जवाब दें, लेकिन मैं एक और बिंदु जोड़ना चाहता हूं

यदि आपके पास टेबल की कोशिकाओं में कोई समस्या है, तो एक नया सेल बनाओ, छाया में एक बेमेल है, इसलिए इस स्थिति में, आपको अपने छाया कोड को लेआउट में रखना चाहिए ताकि एसयूवीएव्यू विधि में यह सभी परिस्थितियों में अच्छी तरह व्यवहार करे।

 -(void)layoutSubviews{ [super layoutSubviews]; [self.contentView setNeedsLayout]; [self.contentView layoutIfNeeded]; [VPShadow applyShadowView:self]; } 

या विशिष्ट दृश्य जगह छाया कोड के लिए ViewControllers में निम्नलिखित विधि के भीतर है ताकि यह काम अच्छी तरह से हो

 -(void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; [self.viewShadow layoutIfNeeded]; [VPShadow applyShadowView:self.viewShadow]; } 

मैंने अधिक सामान्यीकृत फॉर्म के लिए नए देवों के लिए अपने छाया कार्यान्वयन को संशोधित किया है:

 /*! @brief Add shadow to a view. @param layer CALayer of the view. */ +(void)applyShadowOnView:(CALayer *)layer OffsetX:(CGFloat)x OffsetY:(CGFloat)y blur:(CGFloat)radius opacity:(CGFloat)alpha RoundingCorners:(CGFloat)cornerRadius{ UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:layer.bounds cornerRadius:cornerRadius]; layer.masksToBounds = NO; layer.shadowColor = [UIColor blackColor].CGColor; layer.shadowOffset = CGSizeMake(x,y);// shadow x and y layer.shadowOpacity = alpha; layer.shadowRadius = radius;// blur effect layer.shadowPath = shadowPath.CGPath; }