Quartz2D的简单使用概述(三)

这里交代一些作图时可能遇到的问题:

问题一:当同时画多条线时,在第一条线设置属性后,后面画的所有线都会延用这些属性来绘制。

        其实解决的方法很简答,就是在绘制一条新的线条时重置下绘制的属性即可,比如,在画第一条是的属性设置是:

CGContextSetLineWidth(ctx,12);    //线条宽度

[[UIColor redColor]set];                   //线条颜色

CGContextSetLineCap(ctx,kCGLineCapRound);    //端点样式

在绘制第二条线时不想要延用这个属性继续绘制,那么可以重置这些属性:

CGContextSetLineWidth(ctx,1);

[[UIColor blackColor]set];

CGContextSetLineCap(ctx,kCGLineCapButt);

但是这样就出现了新的问题,如果绘制的线条过多,每次到新的线条都要重置属性,这样操作起来就会非常麻烦。当然了,苹果不可能没想到这样的问题,自然也有相应的解决方法了。不过在这之前我们要了解一个新的概念-----图形上下文栈:用于保存图形上下文的状态。
        大体过程是:在设置完第一条线的绘制属性前,我们先保存一份最纯洁的图形上下文(此时是没有做过任何操作的图形上下文),然后设置完第一条线,到第二条线之前,我们拿出之前保存的图形上下文绘制,这样第二条线绘制的属性其实就是系统默认的属性了。

获取完图形上下文后,调用函数CGContextSaveGState(ctx);

在需要重置属性的线条前面调用函数CGContextRestoreGState(ctx);即可

非常简单的两部,但是要说明的是,每次保存都是一份,调用一次之后就没有了,如果要重置几次就保存几次,然后调用,如果调用次数大于保存次数会直接挂掉哟~

问题二:绘制矩形时如何让矩形旋转角度?

这样的情况我们在开发中可能会遇到,这个问题的解决就是使用系统自带的函数即可。

1、.....获取上下文,然后

2、CGContextRotateCTM(ctx,M_Pi_4);

3、....设置绘制属性

4、....渲染

以上方法用于旋转角度的属性设置,要注意的是:这里的旋转不是将绘制的图形旋转,而是将整个layer旋转,而所有的绘制都是在layer上进行的,所以这个函数要在绘制属性设置之前就调用,不然无效。

除了旋转以外,还有缩放和平移。

CGContextScaleCTM(ctx,x,y);    //缩放(x代表宽的倍数,y代表高的倍数)

CGContextTranslateCTM(ctx,x,y);    //平移(x、y分别代表x、y上的偏移量)

问题三:如何让绘制的图片显示成圆形?

解决这个问题的思路:先画一个圆形,把图片绘制在这个圆里面,超出这个圆形范围的部分不显示。具体的代码:

1、获取上下文...

2、CGContextAddEllipseInRect(ctx,CGRectMake(100,100,50,50));    //画一个圆心在(100,100),半径为50的圆形

//关键的一步

3、CGContextClip(ctx);    //指定上下文中可以显示内容的就是上面画的图形的范围

4、把图片绘制到(100,100)的点即可。

当然了,正式项目中根据不同的需求,可以让图片显示在矩形、三角形或者其他各种形状里。

时间: 2024-08-25 01:21:05

Quartz2D的简单使用概述(三)的相关文章

Quartz2D的简单使用概述(二)

接上一篇,继续纪录Quartz2D的一些简单的用法. 举例1:绘制文字         创建一个字符串对象和一个用来给这个字符串对象设置相关属性的字典,使用字符串的绘制方法将它绘制到某个位置或点即可. 矩形的绘制这里不再赘述,主要写一下如何设置文字的属性字典: NSMutableDictionary *dict = [NSMutableDictionary new]; dict[NSForegroundColorAttributeName] = [UIColor redColor];    //

Quartz2D的简单使用概述(一)

很久没有更新博文,今天把之前就想研究的quartz2D看了下,了解了些简单的作画方法,赶紧记录下来.学习Quartz2D的主要目的是为了以后更加方便的自定义一些界面控件时用到,毕竟大部分app都有个性化的定制界面.以下纪录一些常用的简单作图方法. 想要自定义的控件基本都是继承自UIView,然后重写其drawRect方法.Quartz2D的方法都是纯c的,所有通用的步骤都是先获取上下文,然后再进行内部自定义,最后渲染,而且它的自带函数多半都是CGContext开头的: 1.获取上下文 CGCon

iOS开发UI篇—Quartz2D简单使用(三)

iOS开发UI篇-Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界面搭建,如图: 代码示例: YYViewController.m文件 1 // 2 // YYViewController.m 3 // 04-对圆进行缩放 4 // 5 // Created by apple on 14-6-11. 6 // Copyright (c) 2014年 itcase.

Quartz2D简单使用(三)

Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界面搭建,如图: 代码示例: YYViewController.m文件 8 9 #import "YYViewController.h" 10 #import "YYview.h" 11 12 @interface YYViewController () 13 @property (wea

【翻译】MVC Music Store 教程-概述(三)

Controller 与传统的Web框架,将传入的URL通常映射到磁盘上的文件.例如:一个URL请求"/Products.aspx" 或"/Products.php"是处理一个Products.aspx" 或 "Products.php"的文件 MVC框架传入的URL与映射到服务器代码有所不同,而不是将URL传入文件,而是映射到方式方法或者类,这些类被称为"Controller",他们负责处理传入的HTTP请求,处理

杨森翔:春节文化大观上编 第三章 春节古诗词 目录 第一节:春节诗词概述 一、 除夕诗词概述 二、元日诗词概述 三、 元宵诗词概述 第二节:春节古诗词拾萃

杨森翔:春节文化大观上编 第三章 春节古诗词 目录 第一节:春节诗词概述 一. 除夕诗词概述 二.元日诗词概述 三. 元宵诗词概述 第二节:春节古诗词拾萃 一.腊祭诗词 二.祭灶诗词 三.除夕诗词 四.元旦诗词 五.人日诗词 六.元宵诗词 第一节:春节古诗词概述 中国的春节,作为除旧迎新的节日,时间相当长,从年前的腊月二十三,天空中就似乎弥漫了节日的气息.这种节日的气氛,在保持传统风俗较好的地方,甚至会持续到二月二龙抬头的时候,但欢度春节的高潮,应该说是自除夕始一直到上元之夜.因此,历代歌咏和反

html css的简单学习(三)

html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...==========================================================head头的本质:优化页面,利于搜索:设置字符集,防止乱码:引入外部样式方便:规定呈现样式.===========================================================<meta name="

QuartZ2D __ 简单用法 1

一. 简单做一个画板 1. 建立一个UIView类 2. 在.m里建立一个延展 3. 分别定义一个起点, 一个终点的结构体属性 . 在建立一个存储路径的数组 @interface DrawView () { CGPoint _startPoint; CGPoint _endPoint; } @property (nonatomic, strong) NSMutableArray *pathArray; @end 4. 懒加载数组 - (NSMutableArray *)pathArray { i

Quartz2D 之 简单介绍

1. 概述 Quartz2D 是一个二维绘图引擎. 主要功能: 绘制图形:线.矩形.圆.弧 绘制文字 绘制图片 绘制PDF 裁截图片 自定义UI控件 2. 图形上下文 Graphics Context,是绘制图形的环境,就类似现实中的一个画板及画笔.皮擦等整套工具. Quartz2D里面的Graphics Context的类型是CGContextRef. 2.1. 作用 在指定设备.媒介上(屏幕.图片.PDF)绘制图形.设置图形的样式.颜色等属性. 3. 怎么自定义View 在 -(void)D