আমি কীভাবে কোনও ইউআইভিউয়ের নীচে ছায়া আঁকব?


352

আমি UIViewকোকো টাচের একটি নীচের প্রান্তের নীচে ছায়া আঁকার চেষ্টা করছি । আমি বুঝতে পারি যে CGContextSetShadow()ছায়া আঁকার জন্য আমার ব্যবহার করা উচিত তবে কোয়ার্টজ 2 ডি প্রোগ্রামিং গাইডটি কিছুটা অস্পষ্ট:

  1. গ্রাফিক্সের অবস্থাটি সংরক্ষণ করুন।
  2. CGContextSetShadowউপযুক্ত মানগুলি অতিক্রম করে ফাংশনটি কল করুন ।
  3. আপনি ছায়া প্রয়োগ করতে চান এমন সমস্ত অঙ্কন সম্পাদন করুন।
  4. গ্রাফিক্সের অবস্থা পুনরুদ্ধার করুন

আমি একটি UIViewসাবক্লাসে নিম্নলিখিত চেষ্টা করেছি :

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

.. তবে এটি আমার পক্ষে কাজ করে না এবং আমি (ক) কোথায় যাব এবং (খ) UIViewএই কাজটি করার জন্য আমার কিছু করার দরকার আছে সে সম্পর্কে আমি কিছুটা আটকে রয়েছি ?

উত্তর:


98

আপনার বর্তমান কোডে আপনি GStateবর্তমানের প্রসঙ্গটি সংরক্ষণ করুন , ছায়া আঁকতে এটি কনফিগার করুন .. এবং কোনও ছায়া আঁকার জন্য এটি কনফিগার করার আগে এটি যা ছিল তা পুনরুদ্ধার করুন। তারপরে, অবশেষে, আপনি সুপারক্লাসের প্রয়োগটি শুরু করুন drawRect:

ছায়া সেটিংস দ্বারা প্রভাবিত হওয়া উচিত এমন কোনও অঙ্কন পরে হওয়ার দরকার

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

তবে আগে

CGContextRestoreGState(currentContext);

সুতরাং যদি আপনি চান যে সুপারক্লাসগুলি drawRect:একটি ছায়ায় 'মোড়ানো' হয়ে যায়, তবে আপনি কীভাবে এইভাবে আপনার কোডটি পুনর্বিন্যস্ত করবেন তবে কীভাবে হবে?

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

789

খুব সহজেই পদ্ধতির মাধ্যমে হ'ল সূত্রের দিকে দৃষ্টিভঙ্গির কিছু স্তর বৈশিষ্ট্য নির্ধারণ করা:

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

আপনার কোয়ার্টজোর আমদানি করতে হবে।

#import <QuartzCore/QuartzCore.h>

4
তবে সচেতন থাকুন যে এটি কেবল আইওএস ৩.২++ এ কাজ করে তাই আপনার অ্যাপ্লিকেশনটি যদি পুরানো সংস্করণে কাজ করে তবে আপনার যদি খ্রিস্টানদের সমাধান বা কোনও বিকল্প থাকে তবে এই দৃশ্যের পিছনে কোনও স্থির চিত্র ব্যবহার করতে হবে।
ফ্লোরিয়ানবার্গার

119
এই সমাধানটির জন্য #import <QuartzCore/QuartzCore.h>".h ফাইলটিতে যুক্ত হওয়াও দরকার ।
মুসিজেনিসিস

26
সেট আপ masksToBoundsনা NOঅবহেলা করবে cornerRadius, না?
পিক্সেলফ্রেইক

4
ঠিক আছে, এটি সমাধান করার জন্য, ব্যাকগ্রাউন্ড কালারটি স্তরটিতে সেট করা দরকার এবং ভিউটি স্বচ্ছ হওয়া দরকার।
পিক্সেলফ্রিয়াক

@ পিক্সেলফ্রিয়াক আপনি কীভাবে এটি করতে পারেন? আমি চেষ্টা করেছি self.layer.backgroundColor = [[UIColor whiteColor] CGColor];কিন্তু ভাগ্য নেই। কোন মতামত স্বচ্ছ হওয়া প্রয়োজন?
ভিক্টর ভ্যান হি

232
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;

1
আপনার দৃষ্টিভঙ্গিটি আয়তক্ষেত্রাকার হলেই এই অপটিমাইজেশনটি সম্ভবত দরকারী worth
বেনজামিন ডোবেল

1
self.layer.sadowPath ... এর বদলে কি? বা কেবল এটিতে যুক্ত করুন
ক্রিজজ

2
অন্যগুলি ছাড়াও এই অতিরিক্ত লাইনটি যুক্ত করুন।
ক্রিস্টোফেরকটন

11
@ নাথানগ্যাসকিন - ছায়া আঁকাই ব্যয়বহুল অপারেশন, সুতরাং উদাহরণস্বরূপ যদি আপনার অ্যাপ্লিকেশনটি অন্য ইন্টারফেস ওরিয়েন্টেশনকে অনুমোদন দেয় এবং আপনি ডিভাইসটি ঘোরানো শুরু করেন, ছায়ার পথটি নির্দিষ্টভাবে উল্লেখ না করে সেই অ্যানিমেশনের সময় এটি বেশ কয়েকবার রেন্ডার করতে হবে যা উপর নির্ভর করে আকৃতি, সম্ভবত দৃশ্যমানভাবে অ্যানিমেশনটি ধীর করবে
পিটার পাজচল

9
@ বেঞ্জামিনডোবেল এই নির্দিষ্ট লাইনটি কেবল আয়তক্ষেত্রের জন্যই কাজ করে তবে আপনি অ-আয়তক্ষেত্রাকার পথও তৈরি করতে পারেন। উদাহরণস্বরূপ, যদি আপনার একটি বৃত্তাকার আয়তক্ষেত্র থাকে তবে আপনি বেজিয়ারপাথভিথরউন্ডার্ড রেট: কর্নার রেডিওস:
ড্যান ডায়ার

160

একই সমাধান, তবে কেবল আপনাকে মনে করিয়ে দিতে: আপনি স্টোরিবোর্ডে ছায়াকে সরাসরি সংজ্ঞায়িত করতে পারেন।

উদা:

এখানে চিত্র বর্ণনা লিখুন


2
দুঃখের বিষয়, আমি মনে করি সিজি কালার স্টোরিবোর্ড থেকে নাগালের বাইরে রয়েছে :(
আন্টজি

1
শুধু জন্য একটি শ্রেণী সংজ্ঞায়িত UIViewবা CGLayerযা হয় UIColorজন্য মোড়কের CGColor); সম্পত্তি
DeFrenZ

1
এই লিঙ্কটি কি ভাবে সেটি করবেন বর্ণনা cocoadventures.org/post/104137872754/...
কামচাটকা

8
লোকেদের অনুলিপি করা ও আটকানো সহজ করার জন্য: স্তর.মাস্কস টোবাউন্ড, স্তর.শাদোঅফসেট, স্তর.শাদোরেডিয়াস, স্তর.শাদোঅ্যাপেসিটি। টাইপোস আপনাকে এখানে হত্যা করবে।
এটাইলুজ

3
স্তর.শাদোঅ্যাপেসিটির মান 0,5 নয় 0,5 হওয়া উচিত
মরুভূমির গোলাপ

43

আপনি এটি চেষ্টা করতে পারেন .... আপনি মান সহ খেলতে পারেন। shadowRadiusনির্দেশনা দাগ পরিমাণ। shadowOffsetছায়া কোথায় যায় তা নির্দেশ করে।

সুইফট ২.০

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

সুইফট ২.০ এ বেসিক শেডোর উদাহরণ

আউটপুট


19

ইন্টারফেস বিল্ডার ব্যবহার করে সহজ এবং পরিষ্কার সমাধান

আপনার প্রকল্পে ইউআইভিউ.উইফট নামের একটি ফাইল যুক্ত করুন (বা কেবল কোনও ফাইলটিতে এটি পেস্ট করুন):

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
        }
    }
}

তারপরে এটি ইউটিলিটিস প্যানেলে প্রতিটি বৈশিষ্ট্যের জন্য ইন্টারফেস বিল্ডারে উপলব্ধ হবে> বৈশিষ্ট্য পরিদর্শক:

ইউটিলিটিস প্যানেল

আপনি সহজেই এখন ছায়া সেট করতে পারেন।

দ্রষ্টব্য:
- ছায়া আইবিতে প্রদর্শিত হবে না, কেবল রানটাইম এ।
- যেমন মাজন কাসের বলেছিলেন

যাঁরা এটি কাজ করতে ব্যর্থ হয়েছেন তাদের কাছে [...] নিশ্চিত হয়ে নিন যে ক্লিপ সাবভিউগুলি ( clipsToBounds) সক্ষম নয়


এটি সঠিক উত্তর - ভবিষ্যতের ইন্টারফেসের জন্য কোডের ওপরে কনফিগারেশন
ক্র্যাক

এই সমাধানটি আমাকে নীচের সতর্কবাণী বার্তার (প্রতিটি সম্পত্তির জন্য একটি) অকার্যকর আচরণের দিকে নিয়ে যায়:Failed to set (shadowColor) user defined inspected property on (UICollectionViewCell): [<UICollectionViewCell> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key shadowColor.
এক্সভলস

1
UIKitএটিকে কাজ করতে আমাকে আমদানি করতে Foundationহয়েছিল, এক্সকোড দ্বারা নির্মিত প্রাথমিক আমদানি যথেষ্ট নয়, তবে সূক্ষ্ম সংকলন করে। আমার পুরো উত্স কোডটি অনুলিপি করা উচিত ছিল। অ্যাক্সেলকে ধন্যবাদ এই দুর্দান্ত সমাধানের জন্য।
এক্সভলাক্স

13

আমি এটি আমার ব্যবহারের অংশ হিসাবে ব্যবহার করি। এটির সাহায্যে আমরা কেবল ছায়া সেট করতে পারি না তবে যে কোনওটির জন্য একটি বৃত্তাকার কোণা পেতে পারি 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];


7

সুইফট 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
    }
}

আপনি যদি এই পদ্ধতিতে যাচ্ছেন তবে আমি প্যারামিটারগুলি যুক্ত করার বিষয়টি বিবেচনা করব যাতে আপনি মানগুলি এত গতিশীল করতে পারেন যাতে
জোশ ও'কনোর

এটি আমাকে গোল কর্নার দিচ্ছে না, আমি কি কিছু ভুল করছি?
নিখিল মনাপুরে

@ নিখিলমনাপুরে কিছুই ঘটছে না, কারণ এটি হতে পারে কারণ ফাংশনটি installShadow()আহবান করা হয়নি viewDidLoad()বাviewWillAppear()
নিউনি

আমি ওভারলোডেড drawভিউয়ের পদ্ধতি থেকে এটি কল করছিলাম । ছায়াটি সঠিকভাবে আসছে তবে গোলাকার কোণটি আসে না।
নিখিল মনপুরে

@ নিখিলমনাপুরে কোনও বৃত্তাকার সীমানা নেই, এটি এমন হতে পারে কারণ এই দৃষ্টিভঙ্গিটি UIStackViewকেবল লেআউট করে এবং কোনও দর্শন নেই। আপনাকে UIViewসমস্ত কিছুর জন্য ধারক হিসাবে নিয়মিত inোকাতে হতে পারে ।
নিউনি

6

আপনি যদি স্টোরিবোর্ড ব্যবহার করতে চান এবং রানটাইম বৈশিষ্ট্যগুলিতে টাইপ করতে না চান, আপনি সহজেই দর্শনগুলির জন্য একটি এক্সটেনশান তৈরি করতে এবং সেগুলি স্টোরিবোর্ডে ব্যবহারযোগ্য করে তুলতে পারেন।

পদক্ষেপ 1. এক্সটেনশন তৈরি করুন

extension UIView {

@IBInspectable var shadowRadius: CGFloat {
    get {
        return layer.shadowRadius
    }
    set {
        layer.shadowRadius = newValue
    }
}

@IBInspectable var shadowOpacity: Float {
    get {
        return layer.shadowOpacity
    }
    set {
        layer.shadowOpacity = newValue
    }
}

@IBInspectable var shadowOffset: CGSize {
    get {
        return layer.shadowOffset
    }
    set {
        layer.shadowOffset = newValue
    }
}

@IBInspectable var maskToBound: Bool {
    get {
        return layer.masksToBounds
    }
    set {
        layer.masksToBounds = newValue
    }
}
}

পদক্ষেপ ২. আপনি এখন স্টোরিবোর্ডে এই বৈশিষ্ট্যগুলি ব্যবহার করতে পারেনস্টোরিবোর্ড চিত্র


3

যারা এখানে সমস্ত উত্তর দেওয়ার পরে এটি (নিজের হিসাবে!) কাজ করতে ব্যর্থ হয়েছেন তাদের জন্য, কেবল নিশ্চিত হয়ে নিন যে ক্লিপ সাবভিউগুলি বৈশিষ্ট্য পরিদর্শকটিতে সক্ষম নয় ...


1

সুইফট 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

1

আপনি নীচের মতো ছায়া এবং কোণার ব্যাসার্ধের জন্য তৈরি আমার ইউটিলিটি ফাংশনটি ব্যবহার করতে পারেন:

- (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];
}

আশা করি এটা তোমাকে সাহায্য করবে!!!


1

সমস্ত উত্তর ভাল আছে তবে আমি আরও একটি পয়েন্ট যুক্ত করতে চাই

আপনার যদি টেবিল কোষগুলি থাকে তখন আপনি কোনও সমস্যার মুখোমুখি হন, একটি নতুন কক্ষের ছায়ায় কোনও মিল নেই তাই এক্ষেত্রে আপনাকে আপনার ছায়া কোডটি একটি লেআউটসুবিউজ পদ্ধতিতে স্থাপন করতে হবে যাতে এটি সমস্ত পরিস্থিতিতে সুন্দরভাবে আচরণ করবে।

-(void)layoutSubviews{
    [super layoutSubviews];

    [self.contentView setNeedsLayout];
    [self.contentView layoutIfNeeded];
    [VPShadow applyShadowView:self];
}

বা ভিউকন্ট্রোলারগুলিতে নিম্নলিখিত পদ্ধতির নির্দিষ্ট ভিউ স্থানের ছায়া কোডের জন্য যাতে এটি ভালভাবে কাজ করে

-(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;
}

1

সহযোদ্ধা জামারিয়ানদের জন্য, উত্তরের Xamarin.iOS / C # সংস্করণটি নীচের মত দেখাবে:

public override void DrawRect(CGRect area, UIViewPrintFormatter formatter)
{
    CGContext currentContext = UIGraphics.GetCurrentContext();
    currentContext.SaveState();
    currentContext.SetShadow(new CGSize(-15, 20), 5);
    base.DrawRect(area, formatter);
    currentContext.RestoreState();                
}

প্রধান পার্থক্য হ'ল আপনি এমন একটি উদাহরণ অর্জন CGContextকরেছেন যার উপরে আপনি সরাসরি যথাযথ পদ্ধতিগুলি কল করেন।


1

Extensionছায়া যুক্ত করতে আপনি এটি ব্যবহার করতে পারেন

extension UIView {

    func addShadow(offset: CGSize, color: UIColor, radius: CGFloat, opacity: Float)
    {
        layer.masksToBounds = false
        layer.shadowOffset = offset
        layer.shadowColor = color.cgColor
        layer.shadowRadius = radius
        layer.shadowOpacity = opacity

        let backgroundCGColor = backgroundColor?.cgColor
        backgroundColor = nil
        layer.backgroundColor =  backgroundCGColor
    }
}

আপনি এটি পছন্দ করতে পারেন

your_Custom_View.addShadow(offset: CGSize(width: 0, height: 1), color: UIColor.black, radius: 2.0, opacity: 1.0)

0

সুইচ 4-তে আইবি ডিজাইনযোগ্য এবং আইবিআইস্পেসটেবল ব্যবহার করে স্কেচ শ্যাডো

এটি কিভাবে ব্যবহার করতে

ডেমো

পাশ দিয়ে স্কেচ এবং এক্সকোড সাইড

ছায়া পরীক্ষা

কোড

@IBDesignable class ShadowView: UIView {

    @IBInspectable var shadowColor: UIColor? {
        get {
            if let color = layer.shadowColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.shadowColor = color.cgColor
            } else {
                layer.shadowColor = nil
            }
        }
    }

    @IBInspectable var shadowOpacity: Float {
        get {
            return layer.shadowOpacity
        }
        set {
            layer.shadowOpacity = newValue
        }
    }

    @IBInspectable var shadowOffset: CGPoint {
        get {
            return CGPoint(x: layer.shadowOffset.width, y:layer.shadowOffset.height)
        }
        set {
            layer.shadowOffset = CGSize(width: newValue.x, height: newValue.y)
        }

     }

    @IBInspectable var shadowBlur: CGFloat {
        get {
            return layer.shadowRadius
        }
        set {
            layer.shadowRadius = newValue / 2.0
        }
    }

    @IBInspectable var shadowSpread: CGFloat = 0 {
        didSet {
            if shadowSpread == 0 {
                layer.shadowPath = nil
            } else {
                let dx = -shadowSpread
                let rect = bounds.insetBy(dx: dx, dy: dx)
                layer.shadowPath = UIBezierPath(rect: rect).cgPath
            }
        }
    }
}

আউটপুট

ডেমো আউটপুট


আপনি বৈশিষ্ট্যগুলি থেকে ছায়া উপসর্গগুলি সরিয়ে কোডটি উন্নত করতে পারেন। শেডোভিউয়ের লক্ষ্য ছায়া অপারেশন সম্পর্কে পরিষ্কার। আরও একটি বিষয় আপনি এই শ্রেণিতে কোণার ব্যাসার্ধ যুক্ত করতে পারেন। (আজকের দিনে, বেশিরভাগ ছায়া দর্শন কোণার ব্যাসার্ধের সাথে জড়িত)
গণিত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.