AJ分享,必须精品

效果

自定义控件过程

主要过程在上一篇里有介绍了,这里主要介绍下代码实现

先做好要放的view 然后实现呢主要就是四步:
1:获取上下文
2:拼接路径
3:把路径添加到上下文。
4:把上下文渲染到视图

  1. // 1:获取上下文
  2. CGContextRef ctx = UIGraphicsGetCurrentContext();
  3. // 2:拼接路径
  4. /*我们需要画一个圆图*/
  5. CGPoint center = CGPointMake(50, 50);//圆心
  6. CGFloat radius = 43;//半径
  7. CGFloat startA = -M_PI_2 ;//起始角度
  8. CGFloat endA = -M_PI_2 + _progress * M_PI * 2 ;//结束角度。
  9. UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];
  10. //clockwise 顺时针方向。
  11. //3:把路径添加到上下文。
  12. CGContextAddPath(ctx, path.CGPath);
  13. //设置颜色为红色
  14. [[UIColor redColor] set];
  15. //设置线条的宽度
  16. CGContextSetLineWidth(ctx, 10);
  17. //设置两端的样式为圆角
  18. CGContextSetLineCap(ctx,kCGLineCapRound);
  19. //4:把上下文渲染到视图。
  20. CGContextStrokePath(ctx);

Quartz2D画各种图形

画直线

效果:

  1. // 当自定义view第一次显示出来的时候就会调用drawRect方法
  2. 15 - (void)drawRect:(CGRect)rect
  3. 16 {
  4. 17
  5. 18 // 1.取得和当前视图相关联的图形上下文(因为图形上下文决定绘制的输出目标)/
  6. 19 // 如果是在drawRect方法中调用UIGraphicsGetCurrentContext方法获取出来的就是Layer的上下文
  7. 20 CGContextRef ctx=UIGraphicsGetCurrentContext();//不需要*,同id
  8. 21
  9. 22 // 2.绘图(绘制直线), 保存绘图信息
  10. 23 // 设置起点
  11. 24 CGContextMoveToPoint(ctx, 20, 100);
  12. 25 //设置终点
  13. 26 CGContextAddLineToPoint(ctx, 300, 100);
  14. 27
  15. 28
  16. 29 //设置绘图的状态
  17. 30 //设置线条的颜色为蓝色
  18. 31 CGContextSetRGBStrokeColor(ctx, 0, 1.0, 0, 1.0);
  19. 32 //设置线条的宽度
  20. 33 CGContextSetLineWidth(ctx, 15);
  21. 34 //设置线条起点和终点的样式为圆角
  22. 35 CGContextSetLineCap(ctx, kCGLineCapRound);
  23. 36 //设置线条的转角的样式为圆角
  24. 37 CGContextSetLineJoin(ctx, kCGLineJoinRound);
  25. 38 //3.渲染(绘制出一条空心的线)
  26. 39 CGContextStrokePath(ctx);
  27. 40
  28. 41 // //注意线条不能渲染为实心的
  29. 42 // CGContextFillPath(ctx);
  30. 43
  31. 44
  32. 45
  33. 46 //设置第二条线
  34. 47 //设置第二条线的起点
  35. 48 CGContextMoveToPoint(ctx, 50, 200);
  36. 49 //设置第二天线的终点(自动把上一条直线的终点当做起点)
  37. 50 CGContextAddLineToPoint(ctx, 300, 60);
  38. 51
  39. 52 //设置绘图的状态
  40. 53 // CGContextSetRGBStrokeColor(ctx, 1.0, 0.7, 0.3, 1.0);
  41. 54 //第二种设置颜色的方式
  42. 55 [[UIColor grayColor] set];
  43. 56 //设置线条的宽度
  44. 57 CGContextSetLineWidth(ctx, 10);
  45. 58 //设置线条的起点和终点的样式
  46. 59 CGContextSetLineCap(ctx, kCGLineCapButt);
  47. 60
  48. 61 //渲染第二条线的图形到view上
  49. 62 //绘制一条空心的线
  50. 63 CGContextStrokePath(ctx);
  51. 64 }
  52. 65

画三角形

其实就是把线关闭了 一句代码
//关闭起点和终点

  1. CGContextClosePath(ctx);

效果:

  1. - (void)drawRect:(CGRect)rect
  2. 15 {
  3. 16 //1.获得图形上下文
  4. 17 CGContextRef ctx=UIGraphicsGetCurrentContext();
  5. 18
  6. 19 //2.绘制三角形
  7. 20 //设置起点
  8. 21 CGContextMoveToPoint(ctx, 20, 100);
  9. 22 //设置第二个点
  10. 23 CGContextAddLineToPoint(ctx, 40, 300);
  11. 24 //设置第三个点
  12. 25 CGContextAddLineToPoint(ctx, 200, 200);
  13. 26 //设置终点
  14. 27 // CGContextAddLineToPoint(ctx, 20, 100);
  15. 28 //关闭起点和终点
  16. 29 CGContextClosePath(ctx);
  17. 30
  18. 31 // 3.渲染图形到layer上
  19. 32 CGContextStrokePath(ctx);
  20. 33
  21. 34 }

画四边形

效果:

  1. - (void)drawRect:(CGRect)rect
  2. 15 {
  3. 16
  4. 17 //1.获取图形上下文
  5. 18 CGContextRef ctx=UIGraphicsGetCurrentContext();
  6. 19 //2.画四边形
  7. 20 CGContextAddRect(ctx, CGRectMake(20, 20, 150, 100));
  8. 21
  9. 22 // 如果要设置绘图的状态必须在渲染之前
  10. 23 // CGContextSetRGBStrokeColor(ctx, 1.0, 0, 0, 1.0);
  11. 24 // 绘制什么类型的图形(空心或者实心).就要通过什么类型的方法设置状态
  12. 25 // CGContextSetRGBFillColor(ctx, 1.0, 0, 0, 1.0);
  13. 26
  14. 27 // 调用OC的方法设置绘图的颜色
  15. 28 // [[UIColor purpleColor] setFill];
  16. 29 // [[UIColor blueColor] setStroke];
  17. 30 // 调用OC的方法设置绘图颜色(同时设置了实心和空心)
  18. 31 // [[UIColor greenColor] set];
  19. 32 [[UIColor colorWithRed:1.0 green:0 blue:0 alpha:1.0] set];
  20. 33
  21. 34
  22. 35 //3.渲染图形到layer上
  23. 36 //空心的
  24. 37 CGContextStrokePath(ctx);
  25. 38 //实心的
  26. 39 // CGContextFillPath(ctx);
  27. 40
  28. 41 }

画圆

效果:最简单的圆形

  1. - (void)drawRect:(CGRect)rect
  2. {
  3. // 1.获取上下文
  4. CGContextRef ctx = UIGraphicsGetCurrentContext();
  5. // 画圆
  6. CGContextAddArc(ctx, 100, 100, 50, 0, 2 * M_PI, 0);
  7. // 3.渲染 (注意, 画线只能通过空心来画)
  8. // CGContextFillPath(ctx);
  9. CGContextStrokePath(ctx);
  10. }

如果改成CGContextFillPath(ctx);
那么将会变成实心圆。前后联系下就都知道了,不多说了。

效果:画椭圆

  1. // 画椭圆
  2. // 1.获取上下文
  3. CGContextRef ctx = UIGraphicsGetCurrentContext();
  4. // 2.画圆
  5. CGContextAddEllipseInRect(ctx, CGRectMake(50, 100, 100, 230));
  6. [[UIColor purpleColor] set];
  7. // 3.渲染
  8. // CGContextStrokePath(ctx);
  9. CGContextFillPath(ctx);

画圆弧

效果:

  1. // 画圆弧
  2. // 1.获取上下文
  3. CGContextRef ctx = UIGraphicsGetCurrentContext();
  4. // 2.画圆弧
  5. // x/y 圆心
  6. // radius 半径
  7. // startAngle 开始的弧度
  8. // endAngle 结束的弧度
  9. // clockwise 画圆弧的方向 (0 顺时针, 1 逆时针)
  10. // CGContextAddArc(ctx, 100, 100, 50, -M_PI_2, M_PI_2, 0);
  11. CGContextAddArc(ctx, 100, 100, 50, M_PI_2, M_PI, 0);
  12. CGContextClosePath(ctx);
  13. // 3.渲染
  14. // CGContextStrokePath(ctx);
  15. CGContextFillPath(ctx);

四分之一圆:用于饼图

效果:

  1. // 1.获取上下文
  2. CGContextRef ctx = UIGraphicsGetCurrentContext();
  3. // 2.画饼状图
  4. // 画线
  5. CGContextMoveToPoint(ctx, 100, 100);
  6. CGContextAddLineToPoint(ctx, 100, 150);
  7. // 画圆弧
  8. CGContextAddArc(ctx, 100, 100, 50, M_PI_2, M_PI, 0);
  9. // CGContextAddArc(ctx, 100, 100, 50, -M_PI, M_PI_2, 1);
  10. // 关闭路径
  11. CGContextClosePath(ctx);
  12. [[UIColor brownColor]set];
  13. // 3.渲染 (注意, 画线只能通过空心来画)
  14. CGContextFillPath(ctx);
  15. // CGContextStrokePath(ctx);

AJ学IOS(29)UI之Quartz2D自定义下载控件_画各种图形的更多相关文章

  1. iOS开发UI篇—Quartz2D(自定义UIImageView控件)

    iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义 ...

  2. iOS开发UI篇—使用picker View控件完成一个简单的选餐应用

    iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 一.实现效果 说明:点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162 ...

  3. 【转】android UI进阶之自定义组合控件

    [源地址]http://blog.csdn.net/notice520/article/details/6667827 好久没写博客了.实在是忙不过来,不过再不总结总结真的不行了.慢慢来吧,有好多需要 ...

  4. iOS开发之通过代码自定义一个控件

    关于控件的继承关系(面试重点): (1)所有的控件都继承自UIView. (2)能监听事件的都是先继承自UIControl,UIControl再继承自UIView.比如UIButton. (3)能整体 ...

  5. iOS开发UI篇—Quartz2D简单使用(二)

    iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...

  6. AJ学IOS(28)UI之Quartz2D简单介绍

    AJ分享,必须精品 iOS开发UI篇—Quartz2D简单介绍 什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : ...

  7. AJ学IOS(16)UI之XIB自定义Cell实现团购UI

    AJ分享,必须精品 先看效果图 自定义Cell 本次主要是自定义Cell的学习 实现自定义Cell主要有三种方法:按照使用的频繁度排序: XIB > 纯代码 > StoryBoard XI ...

  8. iOS边练边学--(Quartz2D)基本图形的绘制#附加自定义进度控件的练习

    一.Quartz2D使用须知 Quartz2D的API是纯C语言的 Quartz2D的API来自于Core Graphics框架 二.<1>通过原始的方法(C语言)绘制简单图形--了解 & ...

  9. AJ学IOS(20)UI之UIPickerView_点菜系统

    AJ分享,必须精品 先看效果图 ## UIPickerView控件 UIPickerView用处: 用来展示很多行(row) 很多列(component )的数据,多用于电子商务的点菜,城市选择等等. ...

随机推荐

  1. 用Python编写水仙花数

    #找出水仙花数 def sxh(start, end): if end >= start and start >=100 and end<= 999: num=start #将num ...

  2. mybatis3.2.7应用_高级映射(一对一、一对多、多对多)

    1. 一对一查询 需求:查询订单信息,关联查询创建订单的用户信息 1.1 使用resultType实现 1.1.1 sql语句 确定查询的主表:订单表       确定查询的关联表:用户表      ...

  3. 子序列宽度求和 Sum of Subsequence Widths

    2019-10-14 17:00:10 问题描述: 问题求解: 如果暴力求解,时间复杂度是exponational的,因为这里是子序列而不是子数组.显然,直接枚举子序列是不太现实的了,那么可以怎么做呢 ...

  4. [gcd]Codeforces Common Divisors

    Common Divisors time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  5. java获取近几天的日期

    最近在写接口的时候老遇见从mysql中获取近几天数据的需求,获取日期这块不是很熟,网上看了很多但是代码量都太大,还是问了下别人,写了三行代码就解决了,不多说 贴代码了 下面是我获取近十天,每天的日期: ...

  6. Vue history路由模式 apache配置上线

    1. 首先在vue项下的router.js 文件配置 mode为history模式,并且设置好对应的base选项 说明:base配置为你当前项目实际上线时所在的目录文件夹, 我这就是放在站点的根目录下 ...

  7. WeChat-SmallProgram:组件 scroll-view 横向和纵向 案例

    scroll-view为滚动视图,分为水平滚动和垂直滚动.注意滚动视图垂直滚动时一定要设置高度否则的话scroll-view不会生效. 滚动视图常用的地方一般都是Item项比较多的界面,比如我的模块 ...

  8. SpringBoot 监控中心

    1,SpringBoot 监控中心: 针对微服务服务监控,服务器内存内存变化(对内存,线程,日志管理),检测服务配置连接地址是否可用(模拟访问,懒加载),故意将mysql 数据源连接密码写错,启动就会 ...

  9. python ——钟表

    1.表盘 from turtle import * from datetime import * def Skip(step):#表盘不连续地画图 penup() forward(step) pend ...

  10. Scala环境及IDEA配置

    Scala环境及IDEA配置 1 语言介绍 他已经出生15年了,就像明星一样,谁都不可能一开始就人气爆棚粉丝无数,得慢慢混. 成功原因:完全兼容java代码. 身世介绍 Scala在2004年正式问世 ...