猿问

如何在UIView下绘制阴影?

我正在尝试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这项工作感到有些困惑?


浮云间
浏览 714回答 3
3回答

萧十郎

在当前代码中,保存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);}
随时随地看视频慕课网APP
我要回答