记录一次Quartz2D学习(一)
经常看点
drawRect的重写 但是不知道这究竟是神马
今天开始学习这一块的东西,更确切地说是深入
早在view的时候 就经常会调用layer的maskToBounds属性,其实 重写
drawRect方法 也就是对layer的一个绘制
重写也比较简单
1 线条
1.1 下面就是简单地线条的画法:(效果如图)
- (void)drawRect:(CGRect)rect {
// Drawing code
//获取绘制图形的上下文
CGContextRef ctx =UIGraphicsGetCurrentContext();
//设置线条的宽度
CGContextSetLineWidth(ctx, 20);
//设置线条的填充颜色
CGContextSetRGBStrokeColor(ctx, 250, 250, 250, 0.5);
//设置线条的起点
CGContextMoveToPoint(ctx, 100, 100);
//添加线条
CGContextAddLineToPoint(ctx, 150, 150);
//设置线条的圆角
CGContextSetLineCap(ctx, kCGLineCapRound);//kCGLineCapRound 属性有多种,可以设置线条的各种边角状态
//进行绘制
CGContextStrokePath(ctx);
}
1.2 一笔画两条线段
方法重写如下:
- (void)drawRect:(CGRect)rect {
CGContextRef ctx =UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, 20);
CGContextSetRGBStrokeColor(ctx, 250, 250, 250, 0.5);
CGContextMoveToPoint(ctx, 100, 100);
CGContextAddLineToPoint(ctx, 150, 150);
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetLineJoin(ctx, kCGLineJoinRound);
//这两句是在此前的基础上添加的
//先移动到对应的点,再进行绘制
CGContextMoveToPoint(ctx, 150, 150);//可有可无 , 没有这句,效果相同
CGContextAddLineToPoint(ctx, 100, 200);
CGContextStrokePath(ctx);
}
1.3 绘制状态的保存问题 :
当你保存了绘制的状态 之后,就可以回复到上一次保存的状态
TIP: 保存与恢复方法,要成对出现,否则会出现报错---原因,栈内不存在绘制状态
重写方法如下
- (void)drawRect:(CGRect)rect {
CGContextRef ctx =UIGraphicsGetCurrentContext();
//保存当前的绘制状态
CGContextSaveGState(ctx);
CGContextSetLineWidth(ctx, 20);
CGContextSetRGBStrokeColor(ctx, 250, 250, 250, 0.5);
CGContextMoveToPoint(ctx, 100, 100);
CGContextAddLineToPoint(ctx, 150, 150);
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetLineJoin(ctx, kCGLineJoinRound);
//提取出上一次保存的绘制状态
CGContextRestoreGState(ctx);
//另外一种颜色的设置方法
[[UIColor yellowColor] set];
CGContextMoveToPoint(ctx, 150, 150);//可有可无 , 没有这句,效果相同
CGContextAddLineToPoint(ctx, 100, 200);
CGContextStrokePath(ctx);
}
记录一次Quartz2D学习(一)的更多相关文章
- 记录一次Quartz2D学习(七)
(六)内主要讲述了图片的裁剪 本次主要讲交互 7.交互 7.1 通过外部刷新内部的显示效果 初始化的时候设定好初始值,调用setNeedsDisplay方法来重新绘制 - (instancetype ...
- 记录一次Quartz2D学习(六)
(五)内主要讲到了一些图层操作 本次主要讲 图片的裁剪 6图片裁剪 6.1 图片裁剪 TIP: 可能会影响统一图层的显示 - (void)drawRect:(CGRect)rect { CGConte ...
- 记录一次Quartz2D学习(五)
(四)内主要讲了绘制状态的保存与恢复 本次主要讲述 缩放,旋转,平移等操作 5.附加操作 5.1 旋转 TIP: 旋转操作主要是对本次渲染的图层进行旋转,旋转的中心为左上角顶点 - (void)dra ...
- 记录一次Quartz2D学习(四)
(三)内主要讲了图片与文字的绘制 本次主要讲解 绘制状态的保存与恢复,以及对它的使用 4.绘制状态 4.1 绘制状态的保存与恢复,以及对它的应用 TIP:通过对保存恢复绘制状以及多次的渲染,可以绘制出 ...
- 记录一次Quartz2D学习(三)
在(二)内,讲到了几何图形的绘制,这次就讲文本与图片的绘制 3 图片与文本 3.1 文本绘制 - (void)drawRect:(CGRect)rect { NSString * str = @&qu ...
- 记录一次Quartz2D学习(二)
(一)内主要就是讲了线条的绘制以及绘制状态的保存与恢复 本次就讲一些图形的画法 2 图形的绘制 2.1 三角形的绘制 :(就是绘制三条线) - (void)drawRect:(CGRect)rect ...
- iOS学习——Quartz2D学习之UIKit绘制
iOS学习——Quartz2D学习之UIKit绘制 1.总述 在IOS中绘图技术主要包括:UIKit.Quartz 2D.Core Animation和OpenGL ES.其中Core Animati ...
- iOS学习——Quartz2D学习之DrawRect
Quartz2D学习之DrawRect 本文以问答形式主要讲述Quartz2D的相关内容,参考内容是网上下载的学习视频资料. 1.什么是Quartz2D? 他是一个二维的绘图引擎,同时支持iOS和Ma ...
- 开通博客第一天,记录此时此刻,开始学习加强c#
从2017年6月毕业到现在,不断的学习.net,在工作中不断的加强技术,终于在此时此刻决定开通博客,记录此后每一天学习的技术点,两年来,每天所涉及的技术点很杂,学了这个忘了那个,总感觉在进步却总是觉得 ...
随机推荐
- IDDD 实现领域驱动设计-架构之经典分层
上一篇:<IDDD 实现领域驱动设计-上下文映射图及其相关概念> 在<实现领域驱动设计>书中,分层的概念作者讲述的很少,也就几页的内容,但对于我来说,有很多的感触需要诉说.之前 ...
- Android开发之Shape详细解读
日常开发中,我们会遇到一些Button.Textview...等控件的背景是圆角矩形.圆形...等,和android默认的控件背景矩形不一致,此时shape的作用就体现出来了,我们可以根据shape属 ...
- [OpenCV] Background subtraction
不错的草稿.但进一步处理是必然的,也是难点所在. http://docs.opencv.org/master/d1/dc5/tutorial_background_subtraction.html#g ...
- java操作数据库增删改查的小工具2--TxQueryRunner
当涉及到多表查询时,如数据库中有两张表分别为t_person和t_address,表结构如下: 其中t_person的外键为t-address的主键aid, 新建两个javaBean类,Person ...
- 浅析JS中的模块规范(CommonJS,AMD,CMD)
如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧,这些规范到底是啥东西,干嘛的. 一.CommonJS ...
- C#程序开发中经常遇到的10条实用的代码
1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine("Platform: ...
- 7.9 数据注解特性--ForeignKey
外键特性,可以应用到类的属性中.Code-First默认的约定,对外键属性来说,假定外键属性的名称和主键属性是匹配的. 我们看一下,下面的代码: using System; using System. ...
- asp.net开发的一些问题
关于Ajax说法错误的是( ).(选择一项) MVC是一种流行的软件设计模式,它把系统分为三个模块.三个模块为( ). 在ASP.NET中,关于WebService的说法正确的是( ) .NET中Ob ...
- java.lang.Exception: Could not determine the type of file "smb://zhangsan:123456@10.77.44.222/o/mmfiles_2016/40094/25556/2130.avi".
1. 使用smb协议上传文件 报上述错误 2. 解决方法 开启administrator超级管理员 smb地址改为smb://administrator:123456@10.10.10.10/o/.. ...
- python征程3.0(python对象)
1.python使用对象模型来存储数据.构造任何类型的值都是一个对象.”尽管python被当成一种面向对象的脚本的编程语言“,但你完全能够写出不使用任何类和实例的脚本. python对象都拥有三个特性 ...