【深入浅出IOS开发】绘制一个小黄人

来源:互联网 发布:哔哩哔哩没有mac版吗 编辑:程序博客网 时间:2024/05/01 19:59

①首先绘制一个身体

绘制身体的时候要分上中下三段,先设置坐标和长度,然后带入相应的函数中。

一般圆形和弧形用圆心设置

②绘制一个人的嘴型

绘制嘴的时候要点是:通过贝塞尔曲线CGContextAddQuadCurveToPoint绘制。

贝塞尔曲线分三个点:起始点,控制点,结束点

我们通过控制点来约束起始点(CGContextMoveToPoint),和结束点。

[objc] view plaincopy
  1. //绘制身体  
  2. void drawBody(CGContextRef ctr,CGRect rect)  
  3. {  
  4.       
  5.     //绘制上半身  
  6.     CGFloat topX = rect.size.width*0.5;  
  7.     CGFloat topY = 200;  
  8.     CGFloat topRadius = 70;  
  9.     CGContextAddArc(ctr, topX , topY, topRadius, 0, M_PI, 1);  
  10.     //绘制中间  
  11.     CGFloat midX = topX - topRadius;  
  12.     CGFloat midY = 100;  
  13.     CGContextAddLineToPoint(ctr, midX, topY + midY);  
  14.     //绘制下半身  
  15.     CGFloat endX = topX;  
  16.     CGFloat endY = midY + topY;  
  17.     CGFloat endRadius = topRadius;  
  18.     CGContextAddArc(ctr, endX, endY, endRadius, M_PI, 01);  
  19.     //设置颜色  
  20.     [[UIColor yellowColor]set];  
  21.     //闭合路径  
  22.     CGContextClosePath(ctr);  
  23.     CGContextFillPath(ctr);  
  24. }  
  25. //画脸  
  26. void drawMouse(CGContextRef ctr,CGRect rect)  
  27. {  
  28.     //控制点  
  29.     CGFloat controlX = rect.size.width*0.5;  
  30.     CGFloat controlY = 300;  
  31.       
  32.     //左右和上下移动间距  
  33.     CGFloat moveX = 30;  
  34.     CGFloat moveY = 15;  
  35.       
  36.     //开始点  
  37.     CGFloat startX = controlX - moveX;  
  38.     CGFloat startY = controlY - moveY;  
  39.     CGContextMoveToPoint(ctr, startX, startY);  
  40.     //结束点  
  41.     CGFloat endX = controlX + moveX;  
  42.     CGFloat endY = controlY - moveY;  
  43.     //设置颜色  
  44.     [[UIColor blackColor]set];  
  45.     //通过贝塞尔曲线绘制嘴型  
  46.     CGContextAddQuadCurveToPoint(ctr, controlX, controlY, endX, endY);  
  47.     CGContextStrokePath(ctr);  
  48. }  

0 0
原创粉丝点击