Honey
Honey

Reputation: 2880

Drop a shadow to right and bottom of uiview

I have to drop a shadow to the right and bottom of uiview.Im doing this in interface builder.But I see the shadow dropped to top of it.Tried differnt sizes.but couldn't get it.

layer.masksToBound=No
layer.shadowOpacity=0.15
layer.shadowRadius=2
layer.shadowOffSet={10,-10}   //Values being set in Interfacebuilder.

Still this drops shadow at top.What should I do to get at bottom of view.

Upvotes: 36

Views: 73798

Answers (5)

Nitin Gohel
Nitin Gohel

Reputation: 49730

Try the following code, it might help you

    myView.layer.shadowColor = [UIColor purpleColor].CGColor;
    myView.layer.shadowOffset = CGSizeMake(5, 5);
    myView.layer.shadowOpacity = 1;
    myView.layer.shadowRadius = 1.0;
    myView.layer.maskToBounds = NO;

I tested this code and it's working and output is:

enter image description here

Upvotes: 117

Frederic Adda
Frederic Adda

Reputation: 6092

I found out that these values give a nice result :

myView.layer.shadowColor = UIColor.black.cgColor
myView.layer.shadowOpacity = 0.25
myView.layer.shadowRadius = 3
myView.layer.shadowOffset = CGSize(width: 1, height: 1) // shadow on the bottom right

enter image description here

Upvotes: 1

Sriharsha Guduguntla
Sriharsha Guduguntla

Reputation: 171

In Swift 3, CGSizeMake no longer exists. It has been changed to CGSize(width: 20, height: 10). So the shadowOffset can be set like this in Swift 3:

myView.layer.shadowOffset = CGSize(width: 20, height: 10)

Upvotes: 3

nikhil84
nikhil84

Reputation: 3207

Hi I have used below code ,it will provide you with shadow you want.

 UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:_viewShadow.bounds];
_viewShadow.layer.masksToBounds = NO;
_viewShadow.layer.shadowColor = [UIColor blackColor].CGColor;
_viewShadow.layer.shadowOffset = CGSizeMake(10.0f, 5.0f);  /*Change value of X n Y as per your need of shadow to appear to like right bottom or left bottom or so on*/
_viewShadow.layer.shadowOpacity = 0.5f;
_viewShadow.layer.shadowPath = shadowPath.CGPath;

Also masksToBounds is imp as it disables the clipping of sublayers that extend further than the view's bounds. If you put it YES then you won't see shadow as it clips sublayer where else in NO it allow to extent layer.

Upvotes: 6

Gaurav Singh
Gaurav Singh

Reputation: 1997

I think your shadow offset is incorrect. It should be { 10 , 10} like:

[layer setShadowOffset:CGSizeMake( 10 , 10 ) ];

Upvotes: 0

Related Questions