设置阴影

前面已经介绍了CGContextRef为设置图形阴影提供了如下两个函数。

void CGContextSetShadow(CGContextRef context, CGSize offset, CGFloat blur):该函数设置阴影在X、Y方向上的偏移,并设置阴影的模糊程度。该函数的offset包含两个CGFloat值,第1个CGFloat值控制阴影在X方向的偏移,如果该值为正,则向右偏移,否则向左偏移;第2个CGFloat值控制阴影在Y方向的偏移,如果该值为正,则向下偏移,否则向上偏移。最后一个blur参数控制阴影的模糊程度,如果blur参数为1,表明阴影几乎不模糊,blur参数越大,阴影越模糊。

void CGContextSetShadowWithColor(CGContextRef context, CGSize offset, CGFloat blur, CGColorRef color):该函数与前一个函数的功能基本相似,只是该函数多了一个属性用于设置阴影颜色。

下面的程序示范了为所绘制的形状添加阴影。首先创建一个Single View Application,该Application包含一个应用程序委托代理类、一个视图控制器和配套的Storyboard界面设计文件。将该界面设计文件中最大的View改为使用自定义的FKShadowView类。该程序的控制器类几乎无须修改,只要重写FKShadowView的drawRect:方法,在该方法中设置阴影,并绘制带阴影的形状和文本即可。下面是FKShadowView类的实现代码。

程序清单:codes/12/12.2/ShadowTest/ShadowTest/FKShadowView.m
 

 
 
  1. @implementation FKShadowView  
  2. - (void)drawRect:(CGRect)rect  
  3. {     
  4.     CGContextRef ctx = UIGraphicsGetCurrentContext();  // 获取绘图的CGContextRef  
  5.     // 使用默认的阴影颜色,阴影向左上角投影,模糊度为5  
  6.     CGContextSetShadow(ctx, CGSizeMake(8, -6), 5);  
  7.     CGContextSetRGBFillColor (ctx, 1, 0, 1, 1);  // 设置填充颜色  
  8.     CGContextSetRGBStrokeColor (ctx, 0, 0, 1, 1);  // 设置线条颜色  
  9.     CGContextSetTextDrawingMode (ctx, kCGTextFill);  // 设置使用填充模式绘制文字  
  10.     // 绘制文字  
  11.     [@"疯狂iOS讲义" drawAtPoint:CGPointMake(10 ,20)  
  12.         withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:  
  13.         [UIFont fontWithName:@"Arial Rounded MT Bold" size: 45]  
  14.         , NSFontAttributeName ,  
  15.          [UIColor magentaColor] , NSForegroundColorAttributeName, nil]];  
  16.     // 设置使用描边模式绘制文字  
  17.     CGContextSetTextDrawingMode (ctx, kCGTextStroke);  
  18.     // 绘制文字  
  19.     [@"疯狂Android讲义" drawAtPoint:CGPointMake(10 ,80)  
  20.         withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:  
  21.         [UIFont fontWithName:@"Heiti SC" size: 40], NSFontAttributeName ,  
  22.         [UIColor magentaColor] , NSForegroundColorAttributeName, nil]];  
  23.     // 使用默认的阴影颜色,阴影向右下角投影,模糊度为20  
  24.     CGContextSetShadowWithColor(ctx, CGSizeMake(10, 8), 10  
  25.         , [[UIColor redColor] CGColor]);  
  26.     CGContextFillRect(ctx, CGRectMake(20 , 150 , 180 , 80));  
  27.     CGContextSetRGBStrokeColor (ctx, 1, 0, 1, 1);  // 设置线条颜色  
  28.     CGContextStrokeRect(ctx, CGRectMake(30 , 260 , 180 , 80));  

上面程序中的第一行粗体字代码使用默认的阴影颜色,通过传入CGSizeMake(8, -6)参数控制阴影向左上角投影;第二行粗体字代码使用红色作为阴影颜色,通过传入CGSizeMake(10, 8)参数控制阴影向右下角投影。编译、运行该程序,即可看到如图12.6所示的效果。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值