经常看点

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. 如何完全卸载OneDrive (Windows 10 64bit)

    原文参考 http://lifehacker.com/how-to-completely-uninstall-onedrive-in-windows-10-1725363532 To complete ...

  2. Android随笔之——按键长按事件onKeyLongPress

    现在安卓手机实体键是越来越少了,但还是有的,恰好自己就碰上了:按键的长按事件...百度了一些博客,内容都基本上是完全一样的,虽然可以捕获到长按事件,但却会和正常的单击冲突.幸好最近开个VPN,goog ...

  3. Windows 搭建 .NET 跨平台环境并运行应用程序

    写在前面 阅读目录: Install .NET Version Manager (DNVM) Install .NET Core Execution Environment (DNX) Write t ...

  4. 小菜学习Winform(一)贪吃蛇2

    前言 上一篇<小菜学习Winform(一)贪吃蛇>中实现了简单版的贪吃蛇,在文章末也提到需要优化的地方,比如使用oo.得分模式.速度加快模式和减少界面重绘.因为是优化篇,实现方式上一篇有, ...

  5. 辗转相除法求最大公约数,非goto

    #include<iostream> using namespace std; //不推荐用goto,当然用它更快 //辗转相除法求两数的最大公约数 int gcd(long int a, ...

  6. javascript判断元素存在和判断元素存在于实时的dom中的方法

    今天(周六)下午我在公司加班时不知道要干什么,就打开公司的一个wordpress项目网站,想看下之前自己做的一个网页是否有问题. 打开网站首页,我习惯性的打开了chrome的调试工具,然后鼠标开始滚动 ...

  7. 1.羽翼sqlmap学习笔记之Access注入

    使用sqlmap工具进行Acces注入:1.判断一个url是否存在注入点,根据返回数据判断数据库类型: .sqlmap.py -u "http://abcd****efg.asp?id=7& ...

  8. VC++6.0文件关联问题的解决方法

    最近我的电脑*.c文件关联失败,无法实现双击*.c打开vc++6.0,感觉特别不爽. 在经过自己的琢磨研究后,终于找到了解决方法. 特此分享下,希望可以帮到遇到同样问题的你. 核心内容: 1.& ...

  9. 大型网站提速关键技术(页面静态化,memcached,MySql优化)(一)

    一:关键技术介绍: 衡量是否为大型网站的要素: A:PV值(page views 页面浏览量) 访问量大: 带来的问题:1:流量大 -->解决方案:增加带宽,优化程序(视频和图片较浪费带宽,尽量 ...

  10. chrome浏览器的跨域设置——包括版本49前后两种设置

    做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程.但是新版本的chrome浏览器提 ...