iPhone绘图关于QuartZ中绘制Polygons案例

移动开发 iOS
iPhone绘图关于QuartZ中绘制Polygons案例是本文要介绍的内容,主要介绍了如何在QuartZ中绘制Polygons的内容,内容不多,主要是基于代码实现,一起来看这个有趣的案例。

iPhone绘图关于QuartZ绘制Polygons案例是本文要介绍的内容,主要介绍了如何在QuartZ绘制Polygons的内容,内容不多,主要是基于代码实现,一起来看这个有趣的案例。

1.绘制矩形的一般方法

  1. // Drawing with a white stroke color  
  2. CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);  
  3. // And drawing with a blue fill color  
  4. CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);  
  5. // Draw them with a 2.0 stroke width so they are a bit more visible.  
  6. CGContextSetLineWidth(context, 2.0);  
  7. // Add Rect to the current path, then stroke it  
  8. CGContextAddRect(context, CGRectMake(30.0, 30.0, 60.0, 60.0));  
  9. CGContextStrokePath(context);  
  10. // Stroke Rect convenience that is equivalent to above  
  11. CGContextStrokeRect(context, CGRectMake(30.0, 120.0, 60.0, 60.0));  
  12. // Stroke rect convenience equivalent to the above, plus a call to CGContextSetLineWidth().  
  13. CGContextStrokeRectWithWidth(context, CGRectMake(30.0, 210.0, 60.0, 60.0), 10.0);  
  14. // Demonstate the stroke is on both sides of the path.  
  15. CGContextSaveGState(context);  
  16. //red  
  17. CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);  
  18. CGContextStrokeRectWithWidth(context, CGRectMake(30.0, 210.0, 60.0, 60.0), 2.0);  
  19. CGContextRestoreGState(context);  
  20. CGRect rects[] =   
  21. {  
  22. CGRectMake(120.0, 30.0, 60.0, 60.0),  
  23. CGRectMake(120.0, 120.0, 60.0, 60.0),  
  24. CGRectMake(120.0, 210.0, 60.0, 60.0),  
  25. };  
  26. // Bulk call to add rects to the current path.  
  27. CGContextAddRects(context, rects, sizeof(rects)/sizeof(rects[0]));  
  28. CGContextStrokePath(context);  
  29. // Create filled rectangles via two different paths.  
  30. // Add/Fill path  
  31. CGContextAddRect(context, CGRectMake(210.0, 30.0, 60.0, 60.0));  
  32. CGContextFillPath(context);  
  33. // Fill convienience.  
  34. CGContextFillRect(context, CGRectMake(210.0, 120.0, 60.0, 60.0)); 

注释:

  1. CGContextAddRect(context, CGRectMake(30.0, 30.0, 60.0, 60.0));  
  2. CGContextStrokePath(context); 

此两句绘制的是左上角的矩形,当CGContextStrokePath调用之后,current path会被清空。

  1. CGContextStrokeRect(context, CGRectMake(30.0, 120.0, 60.0, 60.0)); 

上面的一条语句等价于上面的两条。

语句

  1. CGContextStrokeRectWithWidth(context, CGRectMake(30.0, 210.0, 60.0, 60.0), 10.0) 

等价与上面的语句在加上CGContextSetLineWidth(10.0)

下面的三条语句通过两种方法来fill矩形区域。

  1. CGContextAddRect(context, CGRectMake(210.0, 30.0, 60.0, 60.0));  
  2. CGContextFillPath(context);  
  3. // Fill convienience.  
  4. CGContextFillRect(context, CGRectMake(210.0, 120.0, 60.0, 60.0)); 

结果如下图:

iPhone绘图关于QuartZ中绘制Polygons案例

2.绘制多边形(Polygon)

  1. // Drawing with a white stroke color  
  2. CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);  
  3. // Drawing with a blue fill color  
  4. CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);  
  5. // Draw them with a 2.0 stroke width so they are a bit more visible.  
  6. CGContextSetLineWidth(context, 2.0);  
  7. CGPoint center;  
  8. // Add a star to the current path  
  9. center = CGPointMake(90.0, 90.0);  
  10. CGContextMoveToPoint(context, center.x, center.y + 60.0);  
  11. for(int i = 1; i < 5; ++i)  
  12. {  
  13. CGFloat x = 60.0 * sinf(i * 4.0 * M_PI / 5.0);  
  14. CGFloat y = 60.0 * cosf(i * 4.0 * M_PI / 5.0);  
  15. CGContextAddLineToPoint(context, center.x + x, center.y + y);  
  16. }  
  17. // And close the subpath.  
  18. CGContextClosePath(context);  
  19. // Now add the hexagon to the current path  
  20. center = CGPointMake(210.0, 90.0);  
  21. CGContextMoveToPoint(context, center.x, center.y + 60.0);  
  22. for(int i = 1; i < 6; ++i)  
  23. {  
  24. CGFloat x = 60.0 * sinf(i * 2.0 * M_PI / 6.0);  
  25. CGFloat y = 60.0 * cosf(i * 2.0 * M_PI / 6.0);  
  26. CGContextAddLineToPoint(context, center.x + x, center.y + y);  
  27. }  
  28. // And close the subpath.  
  29. CGContextClosePath(context);  
  30. // Now draw the star & hexagon with the current drawing mode.  
  31. CGContextDrawPath(context, drawingMode); 

我们会根据drawingMode的五个常量讨论

  1. kCGPathFill, kCGPathEOFill, kCGPathStroke, kCGPathFillStroke, or kCGPathEOFillStroke. 

(1)kCGPathFill如下图:

iPhone绘图关于QuartZ中绘制Polygons案例

此fill 模式为缺省模式(非零缠绕数原则),大概规则为,在需要填充颜色的区域的一点向画区域外画一条线,g如果是从左向右穿过的,则加1,如果从右向左穿过,则减一,最后结果为0则不fill,大于0则填充,所以line的方向对fill的区域有影响。

iPhone绘图关于QuartZ中绘制Polygons案例

还有一种为even-odd(奇偶原则),只计算line穿过path段的个数,为偶数时,不填充,奇数时填充,所以path的方向不会影响填充的结果。

(2) kCGPathEOFill模式

iPhone绘图关于QuartZ中绘制Polygons案例

此填充模式为奇偶模式

(3)kCGPathStroke模式

iPhone绘图关于QuartZ中绘制Polygons案例

(4)kCGPathFillStroke模式

iPhone绘图关于QuartZ中绘制Polygons案例

(5)kCGPathEOFillStroke模式

iPhone绘图关于QuartZ中绘制Polygons案例

小结:iPhone绘图关于QuartZ绘制Polygons案例的内容介绍完了,希望本文对你有所帮助!如果想深入了解iphone绘图的更多内容,请参考:

iPhone绘图关于QuartZ中绘制Line案例

iPhone绘图关于QuartZ中绘制Curves案例

责任编辑:zhaolei 来源: 新浪微博
相关推荐

2011-08-12 11:08:45

iPhone绘图QuartZ绘制

2011-08-12 10:46:18

iPhone绘图绘制QuartZ

2011-08-17 14:32:44

iOS开发绘制

2011-08-09 14:54:29

iPhoneNSDateanotherDate

2011-08-18 15:24:40

iPhone国际化

2011-08-10 18:24:22

iPhone 图形 绘图

2011-08-19 10:05:30

iPhone开发

2011-08-17 14:27:17

Core AnimatQuartz2D

2011-08-15 15:44:46

iPhone开发PDF

2011-08-18 16:24:44

iPhone开发图片

2011-07-29 13:27:48

iPhone 开发 Nib

2011-08-09 17:12:30

iPhoneCFRunLoop

2014-04-29 14:27:59

OpenGL ES 2Android绘制纹理

2011-08-16 15:48:37

iPhone开发抓图程序

2011-08-22 14:21:24

iPhone开发UIView Anim

2011-08-15 13:44:07

iPhone开发UITableView

2011-08-22 15:15:49

iPhone开发NSMutableAr排序

2011-06-13 17:17:22

Qt 绘图 QWT

2011-08-08 14:07:49

iPhone开发 字体

2011-08-15 09:58:25

iPhoneXib文件UITableView
点赞
收藏

51CTO技术栈公众号