2013-07-06 12 views
19

मैं साथ UIView यह वही मेरे डिजाइनर मुझे दिया छाया लागू करने के लिए है पर ड्रॉप छाया और स्ट्रोक छाया जोड़ने के लिए,आईओएस: UIView पर ड्रॉप छाया और स्ट्रोक छाया कैसे जोड़ें?

  • ड्रॉप छाया के लिए, वह मुझे आरजीबी (176,199,226) का उपयोग करने के लिए कहा चाहते हैं 90% अस्पष्टता, दूरी -3 और आकार -5

  • स्ट्रोक छाया के लिए, उन्होंने आकार -1 और 100% अस्पष्टता के आरजीबी (20 9, 217,226) को लागू करने के लिए कहा।

यह फ़ोटोशॉप लागू प्रभावों स्क्रीन है,

enter image description hereenter image description here

आवश्यक छाया के साथ दृश्य (अपेक्षित आउटपुट)

enter image description here

मैं निम्नलिखित की कोशिश की टी प्राप्त करने के लिए वह ड्रॉप शैडो

viewCheck.layer.masksToBounds = NO; 
viewCheck.layer.cornerRadius = 5.f; 
viewCheck.layer.shadowOffset = CGSizeMake(.0f,2.5f); 
viewCheck.layer.shadowRadius = 1.5f; 
viewCheck.layer.shadowOpacity = .9f; 
viewCheck.layer.shadowColor = [UIColor colorWithRed:176.f/255.f green:199.f/255.f blue:226.f/255.f alpha:1.f].CGColor; 
viewCheck.layer.shadowPath = [UIBezierPath bezierPathWithRect:viewCheck.bounds].CGPath; 

और यह यह का परिणाम है,

enter image description here

मैं कैसे समझ मैं स्ट्रोक लागू करते हैं और फ़ोटोशॉप स्क्रीनशॉट में दिखा के रूप में ड्रॉप छाया सकते में समस्या आ रही है (मैं ऊपर जोड़ा गया है)। दूरी, स्प्रेड, आकार, स्थिति कैसे लागू करें?

क्या कोई मुझे इस तरह की छाया लागू करने के लिए एक गाइड पर इंगित कर सकता है? बहुत सारे छाया प्रभाव आ रहे हैं और मैं सीखना चाहता हूं कि यहां प्रत्येक प्रश्न पूछने के बजाय यह कैसे संभव हो सकता है!

धन्यवाद :)

उत्तर

22

मैं विन्यास आप के लिए shadowPath संपत्ति का उपयोग करके प्राप्त किया जा सकता देखने के सबसे विश्वास करते हैं।

viewCheck.layer.shadowRadius = 1.5f; 
viewCheck.layer.shadowColor = [UIColor colorWithRed:176.f/255.f green:199.f/255.f blue:226.f/255.f alpha:1.f].CGColor; 
viewCheck.layer.shadowOffset = CGSizeMake(0.0f, 0.0f); 
viewCheck.layer.shadowOpacity = 0.9f; 
viewCheck.layer.masksToBounds = NO; 

UIEdgeInsets shadowInsets  = UIEdgeInsetsMake(0, 0, -1.5f, 0); 
UIBezierPath *shadowPath  = [UIBezierPath bezierPathWithRect:UIEdgeInsetsInsetRect(viewCheck.bounds, shadowInsets)]; 
viewCheck.layer.shadowPath = shadowPath.CGPath; 

जैसे, shadowInsets की स्थापना इस तरह से

UIEdgeInsets shadowInsets = UIEdgeInsetsMake(0, 0, -1.5f, 0); 
द्वारा

आप एक अच्छे वांछनीय छाया मिल जाएगा:

enter image description here

अब आप कैसे आप छाया आयत होना चाहते हैं तय कर सकते हैं छाया पथ आयत इन्सेट को नियंत्रित करके बनाया गया।

6

लिए सीमा UIView के दे।

#import "QuartzCore/QuartzCore.h" फ़्रेम काम जोड़ें।

myView.layer.cornerRadius = 15.0; // set as you want. 
myView.layer.borderColor = [UIColor lightGrayColor].CGColor; // set color as you want. 
myView.layer.borderWidth = 1.0; // set as you want. 
+0

myView.layer.shadowColor = ...; – mnl

+0

myView.layer.shadowOffset = ...; – mnl

8

User Defined Runtime Attribute के लिए चरण निम्नलिखित हैं।

  1. इंटरफ़ेस बिल्डर में स्टोरीबोर्ड या xib फ़ाइल खोलें।
  2. इंटरफ़ेस बिल्डर में, विशेषता जोड़ने के लिए ऑब्जेक्ट का चयन करें।
  3. देखें> उपयोगिताओं> पहचान निरीक्षक दिखाएँ चुनें।

पहचान निरीक्षक उपयोगिता क्षेत्र में प्रकट होता है। जैसा कि नीचे दिखाया गया है, उपयोगकर्ता परिभाषित रनटाइम विशेषता संपादक इंस्पेक्टर में आइटमों में से एक है।

enter image description here

  1. उपयोगकर्ता परिभाषित क्रम के निचले बाएँ में जोड़ें बटन (+) क्लिक करें संपादक जिम्मेदार बताते हैं।

enter image description here

2

मैं कर रहा हूँ माफ करना, मैं केवल स्विफ्ट समाधान लेकिन यहाँ जो मैं इस कार्य को करने के लिए उपयोग अपने UIView एक्सटेंशन है:

// MARK: Layer Extensions 
extension UIView { 

    func setCornerRadius(#radius: CGFloat) { 
     self.layer.cornerRadius = radius 
     self.layer.masksToBounds = true 
    } 

    func addShadow(#offset: CGSize, radius: CGFloat, color: UIColor, opacity: Float, cornerRadius: CGFloat? = nil) { 
     self.layer.shadowOffset = offset 
     self.layer.shadowRadius = radius 
     self.layer.shadowOpacity = opacity 
     self.layer.shadowColor = color.CGColor 
     if let r = cornerRadius { 
      self.layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: r).CGPath 
     } 
    } 

    func addBorder(#width: CGFloat, color: UIColor) { 
     self.layer.borderWidth = width 
     self.layer.borderColor = color.CGColor 
     self.layer.masksToBounds = true 
    } 

    func drawStroke(#width: CGFloat, color: UIColor) { 
     let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: self.w, height: self.w), cornerRadius: self.w/2) 
     let shapeLayer = CAShapeLayer() 
     shapeLayer.path = path.CGPath 
     shapeLayer.fillColor = UIColor.clearColor().CGColor 
     shapeLayer.strokeColor = color.CGColor 
     shapeLayer.lineWidth = width 
     self.layer.addSublayer(shapeLayer) 
    } 

} 

मैं इसे कभी नहीं की कोशिश की लेकिन तुम सिर्फ पेस्ट कर सकता है यह कोड किसी भी स्विफ्ट फ़ाइल में है और शायद उन्हें ओब्जे-सी कोड से कॉल करें।

संबंधित मुद्दे