经常看点

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学习(一)的更多相关文章

  1. 记录一次Quartz2D学习(七)

    (六)内主要讲述了图片的裁剪 本次主要讲交互 7.交互 7.1  通过外部刷新内部的显示效果 初始化的时候设定好初始值,调用setNeedsDisplay方法来重新绘制 - (instancetype ...

  2. 记录一次Quartz2D学习(六)

    (五)内主要讲到了一些图层操作 本次主要讲 图片的裁剪 6图片裁剪 6.1 图片裁剪 TIP: 可能会影响统一图层的显示 - (void)drawRect:(CGRect)rect { CGConte ...

  3. 记录一次Quartz2D学习(五)

    (四)内主要讲了绘制状态的保存与恢复 本次主要讲述 缩放,旋转,平移等操作 5.附加操作 5.1 旋转 TIP: 旋转操作主要是对本次渲染的图层进行旋转,旋转的中心为左上角顶点 - (void)dra ...

  4. 记录一次Quartz2D学习(四)

    (三)内主要讲了图片与文字的绘制 本次主要讲解 绘制状态的保存与恢复,以及对它的使用 4.绘制状态 4.1 绘制状态的保存与恢复,以及对它的应用 TIP:通过对保存恢复绘制状以及多次的渲染,可以绘制出 ...

  5. 记录一次Quartz2D学习(三)

    在(二)内,讲到了几何图形的绘制,这次就讲文本与图片的绘制 3 图片与文本 3.1 文本绘制 - (void)drawRect:(CGRect)rect { NSString * str = @&qu ...

  6. 记录一次Quartz2D学习(二)

    (一)内主要就是讲了线条的绘制以及绘制状态的保存与恢复 本次就讲一些图形的画法 2 图形的绘制 2.1  三角形的绘制 :(就是绘制三条线) - (void)drawRect:(CGRect)rect ...

  7. iOS学习——Quartz2D学习之UIKit绘制

    iOS学习——Quartz2D学习之UIKit绘制 1.总述 在IOS中绘图技术主要包括:UIKit.Quartz 2D.Core Animation和OpenGL ES.其中Core Animati ...

  8. iOS学习——Quartz2D学习之DrawRect

    Quartz2D学习之DrawRect 本文以问答形式主要讲述Quartz2D的相关内容,参考内容是网上下载的学习视频资料. 1.什么是Quartz2D? 他是一个二维的绘图引擎,同时支持iOS和Ma ...

  9. 开通博客第一天,记录此时此刻,开始学习加强c#

    从2017年6月毕业到现在,不断的学习.net,在工作中不断的加强技术,终于在此时此刻决定开通博客,记录此后每一天学习的技术点,两年来,每天所涉及的技术点很杂,学了这个忘了那个,总感觉在进步却总是觉得 ...

随机推荐

  1. .NET使用OpenSSL生成的pem密钥文件[1024位]

    using System; using System.Text; using System.Security.Cryptography; using System.Web; using System. ...

  2. 跌倒了,再爬起来:ASP.NET 5 Identity

    "跌倒了"指的是这一篇博文:爱与恨的抉择:ASP.NET 5+EntityFramework 7 如果想了解 ASP.NET Identity 的"历史"及&q ...

  3. .NET随记【你懂的】

    .NET随记.txt放在桌面好久了,编程过程中记录些杂七杂八的东西,分享给大家希望有所帮助. goto 常用于 switch语句中 字符串相加用 StringBuilder的Append()方法性能好 ...

  4. geotrellis使用(四)geotrellis数据处理部分细节

    前面写了几篇博客介绍了Geotrellis的简单使用,具体链接在文后,今天我主要介绍一下Geotrellis在数据处理的过程中需要注意的细节,或者一些简单的经验技巧以供参考. 一.直接操作本地Geot ...

  5. 跨域post请求实现方案小结--转

    [名词解释] 跨域:https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript 同源策略 ...

  6. 关于Java中的transient关键字

    Java中的transient关键字是在序列化时候用的,如果用transient修饰变量,那么该变量不会被序列化. 下面的例子中创建了一个Student类,有三个成员变量:id,name,age.ag ...

  7. Wave - 花たん 音乐

    Wave 歌手:花たん 所属专辑:Flower 間違えて宇宙終わって(宇宙因为一个错误而终结了) 青信号はいつも通り(通行的灯号一如往常的) 飛んでまた止まって(又再停止传播) また 飛びそうだ(然后 ...

  8. [Web API] Web API 2 深入系列(6) Model绑定(上)

    目录 解决什么问题 Model元数据解析 复杂类型 ValueProvider ValueProviderFactory 解决什么问题 Model: Action方法上的参数 Model绑定: 对Ac ...

  9. C#根据句柄改变窗体控件值

    需求是这样,有个程序界面我们需要通过自己的程序持续输入数据,界面如图. 可以获得控件的句柄而用钩子写入值.这里需要用到spy++工具.在VS的工具下有个spy++工具,打开如下图 通过这个工具可以获得 ...

  10. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...