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 )的数据,多用于电子商务的点菜,城市选择等等. ...
随机推荐
- adt-bundle环境搭建(Win7+Win10)
一.adt-bundle安装包 安装包的下载地址:http://tools.android-studio.org/index.php/adt-bundle-plugin 链接中包含有windows. ...
- 最简易 Pair of Topics解决方法
这个题花费了我两天的时间来解决,最终找到了两个比较简单的方法 首先这个题不难看出是寻找a[i]+a[j]<0的情况,我第一开始直接用两个for循环遍历通过不了,应该是复杂度太大了 第一个方法 # ...
- 题解 P2642 【双子序列最大和】
前言 其实这道题的关键就是在于预处理,其方法类似于 合唱队形 正文 求最大子段和 要想求出双子序列最大和,首先我们要会求出最大子段和 最大子段和的求值方法很简单 定义 \(f_i\) 为以第 \(i\ ...
- 如何让Docker镜像飞起来
前言 Docker用起来非常爽,尤其是用于DevOps实践时.但是,当你在国内或者本地拉取镜像时,经常会碰到各种“便秘”——要么镜像拉取缓慢,要么时断时连,要么连接超时! 当我们的镜像又比较大时(比如 ...
- 全屏banner及全屏轮播
一.全屏banner 1.设置网页图片全屏banner <!DOCTYPE html> <html lang="en"> <head> < ...
- 怎么在三层架构中使用Quartz.Net开源项目(与数据库交互)
1.首先在项目中先创建一个控制台应用程序 2.然后右击项目中的[引用],可以[添加引用],也可以[管理NuGet程序包],作者使用的是[添加引用],添加本地应用.版本不同,所使用的方式不同.需要此版本 ...
- Python input和print函数
一.input函数 可以看出,input()函数默认输入的是字符串类型,需要eval()函数将其进行转换. 区别直接赋值的情况,Python可以自动识别数据类型 二.print函数 1.直接输出 无论 ...
- Ali_Cloud++:阿里云-单机版 solr4.10.3 安装部署
本次案例演示:环境 1.solr-4.10.3.tgz.tgz 2.apache-tomcat-7.0.88.tar.gz 3.IKAnalyzer2012FF_hf1.zip 资源下载:Downlo ...
- WEB安全——XML注入
浅析XML注入 认识XML DTD XML注入 XPath注入 XSL和XSLT注入 前言前段时间学习了.net,通过更改XML让连接数据库变得更方便,简单易懂,上手无压力,便对XML注入这块挺感兴趣 ...
- 阿里 IOS 面试官教你在面试中脱颖而出
前言: 知己知彼.百战不殆,面试也是如此. 只有充分了解面试官的思路,才能更好地在面试中充分展现自己. 今天,阿里高级技术专家将分享自己作为面试官的心得与体会.如果你是面试者,可以借此为镜,对照发现自 ...