AJ学IOS(29)UI之Quartz2D自定义下载控件_画各种图形
AJ分享,必须精品
效果
自定义控件过程
主要过程在上一篇里有介绍了,这里主要介绍下代码实现
先做好要放的view 然后实现呢主要就是四步:
1:获取上下文
2:拼接路径
3:把路径添加到上下文。
4:把上下文渲染到视图
// 1:获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2:拼接路径
/*我们需要画一个圆图*/
CGPoint center = CGPointMake(50, 50);//圆心
CGFloat radius = 43;//半径
CGFloat startA = -M_PI_2 ;//起始角度
CGFloat endA = -M_PI_2 + _progress * M_PI * 2 ;//结束角度。
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];
//clockwise 顺时针方向。
//3:把路径添加到上下文。
CGContextAddPath(ctx, path.CGPath);
//设置颜色为红色
[[UIColor redColor] set];
//设置线条的宽度
CGContextSetLineWidth(ctx, 10);
//设置两端的样式为圆角
CGContextSetLineCap(ctx,kCGLineCapRound);
//4:把上下文渲染到视图。
CGContextStrokePath(ctx);
Quartz2D画各种图形
画直线
效果:
// 当自定义view第一次显示出来的时候就会调用drawRect方法
15 - (void)drawRect:(CGRect)rect
16 {
17
18 // 1.取得和当前视图相关联的图形上下文(因为图形上下文决定绘制的输出目标)/
19 // 如果是在drawRect方法中调用UIGraphicsGetCurrentContext方法获取出来的就是Layer的上下文
20 CGContextRef ctx=UIGraphicsGetCurrentContext();//不需要*,同id
21
22 // 2.绘图(绘制直线), 保存绘图信息
23 // 设置起点
24 CGContextMoveToPoint(ctx, 20, 100);
25 //设置终点
26 CGContextAddLineToPoint(ctx, 300, 100);
27
28
29 //设置绘图的状态
30 //设置线条的颜色为蓝色
31 CGContextSetRGBStrokeColor(ctx, 0, 1.0, 0, 1.0);
32 //设置线条的宽度
33 CGContextSetLineWidth(ctx, 15);
34 //设置线条起点和终点的样式为圆角
35 CGContextSetLineCap(ctx, kCGLineCapRound);
36 //设置线条的转角的样式为圆角
37 CGContextSetLineJoin(ctx, kCGLineJoinRound);
38 //3.渲染(绘制出一条空心的线)
39 CGContextStrokePath(ctx);
40
41 // //注意线条不能渲染为实心的
42 // CGContextFillPath(ctx);
43
44
45
46 //设置第二条线
47 //设置第二条线的起点
48 CGContextMoveToPoint(ctx, 50, 200);
49 //设置第二天线的终点(自动把上一条直线的终点当做起点)
50 CGContextAddLineToPoint(ctx, 300, 60);
51
52 //设置绘图的状态
53 // CGContextSetRGBStrokeColor(ctx, 1.0, 0.7, 0.3, 1.0);
54 //第二种设置颜色的方式
55 [[UIColor grayColor] set];
56 //设置线条的宽度
57 CGContextSetLineWidth(ctx, 10);
58 //设置线条的起点和终点的样式
59 CGContextSetLineCap(ctx, kCGLineCapButt);
60
61 //渲染第二条线的图形到view上
62 //绘制一条空心的线
63 CGContextStrokePath(ctx);
64 }
65
画三角形
其实就是把线关闭了 一句代码
//关闭起点和终点
CGContextClosePath(ctx);
效果:
- (void)drawRect:(CGRect)rect
15 {
16 //1.获得图形上下文
17 CGContextRef ctx=UIGraphicsGetCurrentContext();
18
19 //2.绘制三角形
20 //设置起点
21 CGContextMoveToPoint(ctx, 20, 100);
22 //设置第二个点
23 CGContextAddLineToPoint(ctx, 40, 300);
24 //设置第三个点
25 CGContextAddLineToPoint(ctx, 200, 200);
26 //设置终点
27 // CGContextAddLineToPoint(ctx, 20, 100);
28 //关闭起点和终点
29 CGContextClosePath(ctx);
30
31 // 3.渲染图形到layer上
32 CGContextStrokePath(ctx);
33
34 }
画四边形
效果:
- (void)drawRect:(CGRect)rect
15 {
16
17 //1.获取图形上下文
18 CGContextRef ctx=UIGraphicsGetCurrentContext();
19 //2.画四边形
20 CGContextAddRect(ctx, CGRectMake(20, 20, 150, 100));
21
22 // 如果要设置绘图的状态必须在渲染之前
23 // CGContextSetRGBStrokeColor(ctx, 1.0, 0, 0, 1.0);
24 // 绘制什么类型的图形(空心或者实心).就要通过什么类型的方法设置状态
25 // CGContextSetRGBFillColor(ctx, 1.0, 0, 0, 1.0);
26
27 // 调用OC的方法设置绘图的颜色
28 // [[UIColor purpleColor] setFill];
29 // [[UIColor blueColor] setStroke];
30 // 调用OC的方法设置绘图颜色(同时设置了实心和空心)
31 // [[UIColor greenColor] set];
32 [[UIColor colorWithRed:1.0 green:0 blue:0 alpha:1.0] set];
33
34
35 //3.渲染图形到layer上
36 //空心的
37 CGContextStrokePath(ctx);
38 //实心的
39 // CGContextFillPath(ctx);
40
41 }
画圆
效果:最简单的圆形
- (void)drawRect:(CGRect)rect
{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 画圆
CGContextAddArc(ctx, 100, 100, 50, 0, 2 * M_PI, 0);
// 3.渲染 (注意, 画线只能通过空心来画)
// CGContextFillPath(ctx);
CGContextStrokePath(ctx);
}
如果改成CGContextFillPath(ctx);
那么将会变成实心圆。前后联系下就都知道了,不多说了。
效果:画椭圆
// 画椭圆
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.画圆
CGContextAddEllipseInRect(ctx, CGRectMake(50, 100, 100, 230));
[[UIColor purpleColor] set];
// 3.渲染
// CGContextStrokePath(ctx);
CGContextFillPath(ctx);
画圆弧
效果:
// 画圆弧
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.画圆弧
// x/y 圆心
// radius 半径
// startAngle 开始的弧度
// endAngle 结束的弧度
// clockwise 画圆弧的方向 (0 顺时针, 1 逆时针)
// CGContextAddArc(ctx, 100, 100, 50, -M_PI_2, M_PI_2, 0);
CGContextAddArc(ctx, 100, 100, 50, M_PI_2, M_PI, 0);
CGContextClosePath(ctx);
// 3.渲染
// CGContextStrokePath(ctx);
CGContextFillPath(ctx);
四分之一圆:用于饼图
效果:
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.画饼状图
// 画线
CGContextMoveToPoint(ctx, 100, 100);
CGContextAddLineToPoint(ctx, 100, 150);
// 画圆弧
CGContextAddArc(ctx, 100, 100, 50, M_PI_2, M_PI, 0);
// CGContextAddArc(ctx, 100, 100, 50, -M_PI, M_PI_2, 1);
// 关闭路径
CGContextClosePath(ctx);
[[UIColor brownColor]set];
// 3.渲染 (注意, 画线只能通过空心来画)
CGContextFillPath(ctx);
// CGContextStrokePath(ctx);
AJ学IOS(29)UI之Quartz2D自定义下载控件_画各种图形的更多相关文章
- iOS开发UI篇—Quartz2D(自定义UIImageView控件)
iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义 ...
- iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 一.实现效果 说明:点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162 ...
- 【转】android UI进阶之自定义组合控件
[源地址]http://blog.csdn.net/notice520/article/details/6667827 好久没写博客了.实在是忙不过来,不过再不总结总结真的不行了.慢慢来吧,有好多需要 ...
- iOS开发之通过代码自定义一个控件
关于控件的继承关系(面试重点): (1)所有的控件都继承自UIView. (2)能监听事件的都是先继承自UIControl,UIControl再继承自UIView.比如UIButton. (3)能整体 ...
- iOS开发UI篇—Quartz2D简单使用(二)
iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...
- AJ学IOS(28)UI之Quartz2D简单介绍
AJ分享,必须精品 iOS开发UI篇—Quartz2D简单介绍 什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : ...
- AJ学IOS(16)UI之XIB自定义Cell实现团购UI
AJ分享,必须精品 先看效果图 自定义Cell 本次主要是自定义Cell的学习 实现自定义Cell主要有三种方法:按照使用的频繁度排序: XIB > 纯代码 > StoryBoard XI ...
- iOS边练边学--(Quartz2D)基本图形的绘制#附加自定义进度控件的练习
一.Quartz2D使用须知 Quartz2D的API是纯C语言的 Quartz2D的API来自于Core Graphics框架 二.<1>通过原始的方法(C语言)绘制简单图形--了解 & ...
- AJ学IOS(20)UI之UIPickerView_点菜系统
AJ分享,必须精品 先看效果图 ## UIPickerView控件 UIPickerView用处: 用来展示很多行(row) 很多列(component )的数据,多用于电子商务的点菜,城市选择等等. ...
随机推荐
- 用Python编写水仙花数
#找出水仙花数 def sxh(start, end): if end >= start and start >=100 and end<= 999: num=start #将num ...
- mybatis3.2.7应用_高级映射(一对一、一对多、多对多)
1. 一对一查询 需求:查询订单信息,关联查询创建订单的用户信息 1.1 使用resultType实现 1.1.1 sql语句 确定查询的主表:订单表 确定查询的关联表:用户表 ...
- 子序列宽度求和 Sum of Subsequence Widths
2019-10-14 17:00:10 问题描述: 问题求解: 如果暴力求解,时间复杂度是exponational的,因为这里是子序列而不是子数组.显然,直接枚举子序列是不太现实的了,那么可以怎么做呢 ...
- [gcd]Codeforces Common Divisors
Common Divisors time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- java获取近几天的日期
最近在写接口的时候老遇见从mysql中获取近几天数据的需求,获取日期这块不是很熟,网上看了很多但是代码量都太大,还是问了下别人,写了三行代码就解决了,不多说 贴代码了 下面是我获取近十天,每天的日期: ...
- Vue history路由模式 apache配置上线
1. 首先在vue项下的router.js 文件配置 mode为history模式,并且设置好对应的base选项 说明:base配置为你当前项目实际上线时所在的目录文件夹, 我这就是放在站点的根目录下 ...
- WeChat-SmallProgram:组件 scroll-view 横向和纵向 案例
scroll-view为滚动视图,分为水平滚动和垂直滚动.注意滚动视图垂直滚动时一定要设置高度否则的话scroll-view不会生效. 滚动视图常用的地方一般都是Item项比较多的界面,比如我的模块 ...
- SpringBoot 监控中心
1,SpringBoot 监控中心: 针对微服务服务监控,服务器内存内存变化(对内存,线程,日志管理),检测服务配置连接地址是否可用(模拟访问,懒加载),故意将mysql 数据源连接密码写错,启动就会 ...
- python ——钟表
1.表盘 from turtle import * from datetime import * def Skip(step):#表盘不连续地画图 penup() forward(step) pend ...
- Scala环境及IDEA配置
Scala环境及IDEA配置 1 语言介绍 他已经出生15年了,就像明星一样,谁都不可能一开始就人气爆棚粉丝无数,得慢慢混. 成功原因:完全兼容java代码. 身世介绍 Scala在2004年正式问世 ...