如何在UIView下绘制阴影
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在UIView下绘制阴影相关的知识,希望对你有一定的参考价值。
参考技术A 答案:Christian Brunschen
在你当前的代码里,保存当前内容的GState,配置它来绘制一个阴影。然后恢复到你配置阴影之前的状态。接下来,调用drawRect:的超类实现。
绘制阴影应受阴影设置影响,需要如下之后发生:
1
CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);
但是在如下之前:
1
CGContextRestoreGState(currentContext);
所以如果你想让超类的drawRect: 被包裹在一个阴影里,那么把你的代码写成这样怎么样?
1
2
3
4
5
6
7
- (void)drawRect:(CGRect)rect
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);
[super drawRect: rect];
CGContextRestoreGState(currentContext);
ollie
迄今为止比较简单的一个方法是设置初始化视图的层属性。
1
2
3
4
5
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;
Z.Y.
1
2
3
4
5
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;
这将会减慢应用程序。只要你的视图是中规中矩的矩形,加上下面这几行代码可以提高性能。
1
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath;
Srikar Appal
我把这个作为utils的一部分。有了这个我们不仅可以轻松地设置阴影,还可以为任何UIView获得圆角。还可以设置阴影颜色。通常选用黑色,但是当背景不是白色的时候,或许你会想用一些别的颜色。这是我的方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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];
以上是关于如何在UIView下绘制阴影的主要内容,如果未能解决你的问题,请参考以下文章
在 UIScrollView 下方绘制阴影(滚动 UIView)