为了账号安全,请及时绑定邮箱和手机立即绑定

如何在UIView下绘制阴影?

如何在UIView下绘制阴影?

浮云间 2019-09-27 16:44:53
我正在尝试UIView在Cocoa Touch 的底部边缘下方绘制阴影。我知道我应该CGContextSetShadow()用来绘制阴影,但是Quartz 2D编程指南有点模糊:保存图形状态。调用该函数CGContextSetShadow,并传递适当的值。执行要向其应用阴影的所有图形。恢复图形状态我在UIView子类中尝试了以下方法:- (void)drawRect:(CGRect)rect {    CGContextRef currentContext = UIGraphicsGetCurrentContext();    CGContextSaveGState(currentContext);    CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);    CGContextRestoreGState(currentContext);    [super drawRect: rect];}..但这对我不起作用,我对(a)接下来要去哪里和(b)是否需要做些什么来完成UIView这项工作感到有些困惑?
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

在当前代码中,保存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);

}


查看完整回答
反对 回复 2019-09-27
  • 3 回答
  • 0 关注
  • 713 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信