Quartz2D的简单使用概述(一)

很久没有更新博文,今天把之前就想研究的quartz2D看了下,了解了些简单的作画方法,赶紧记录下来。学习Quartz2D的主要目的是为了以后更加方便的自定义一些界面控件时用到,毕竟大部分app都有个性化的定制界面。以下纪录一些常用的简单作图方法。

想要自定义的控件基本都是继承自UIView,然后重写其drawRect方法。Quartz2D的方法都是纯c的,所有通用的步骤都是先获取上下文,然后再进行内部自定义,最后渲染,而且它的自带函数多半都是CGContext开头的:

1.获取上下文

CGContextRef ctx = UIGraphicsGetCurrentContext();

2.进行自定义做图

...具体方法在后面单个举例

3.渲染(针对不同情况,进行不同的渲染)

CGContextStrokePath(ctx);    //空心

CGContextFillPath(ctx);         //实心

举例1:画直线

//获取上下文

CGContextRef ctx = UIGraphicsGetCurrentContext();

//设置起止点

CGContextMoveToPoint(ctx,20,100);         //起点

CGContextAddLineToPoint(ctx,50,150);    //终点

[[UIColor redColor] set];    //设置绘制的颜色

CGContextSetLineCap(ctx,kCGLineCapRound);    //起止点的样式(圆形)

CGContextSetLineJoin(ctx,kCGLineJoinRound);    //转角点的样式(圆形)

//最关键的一步-----渲染

CGContextStrokePath(ctx);    //要注意,线条不要渲染为实心的

举例2:画三角形

重复的方法这里不写了,仍然是先获取上下文,设置起点,第一个转折点,终点,最后再回到起点即可。

CGContextMoveToPoint(ctx,20,100);         //起点

CGContextAddLineToPoint(ctx,100,100);  //转折点

CGContextAddLineToPoint(ctx,50,150);    //终点

CGContextAddLineToPoint(ctx,20,100);    //回到起点

当然还有自带的封闭方法可以调用:

CGContextClosePath(ctx);                          //会自动将起点和终点连接起来

举例3:画矩形

//专用方法

CGContextAddRect(ctx,CGRectMake(100,100,100,80));

然后设置一些基本的属性后就可以渲染了,既可以渲染成空心,也可以是实心

举例4:画圆形

//专用方法(其实也是画椭圆的方法)

CGCoontextAddArc(ctx,100,100,50,0,2*M_Pi,0);

//参数要注意下:

参数2和3:圆心坐标

参数4:圆的半径

参数5:开始绘制的角度

参数6:结束绘制的角度

参数7:绘制的方向(0顺时针,1逆时针)

可以渲染成空心,也可以是实心

举例5:画椭圆

        //专用方法

CGContextAddEllipseInRect(ctx,CGRectMake(100,100,50,60));

说明一下,这个方法既可以用来画椭圆,也可以用来画圆,宽高不同为椭圆,相同即为圆。

举例5:画圆弧

//这里使用的是画圆的方法

CGCoontextAddArc(ctx,100,100,50,M_Pi_2,M_Pi,0);

//然后调用连接起止点的方法即可

CGContextClosePath(ctx);

举例6:画饼形

//画饼形要先画一条直线,然后使用这条直线的长度画圆即可

CGContextMoveToPoint(ctx,100,100);

CGContextAddLineToPoint(ctx,100,150);

// 画圆

CGCoontextAddArc(ctx,100,100,50,M_Pi_2,M_Pi,0);

//最后渲染即可

这里要总结的说一点:所有的绘制过程必须写在获取上下文之后和渲染之前,这是标准的绘制过程。对于不同的需求,采取不同的渲染(空心和实心)。

时间: 2024-10-03 18:12:10

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

Quartz2D的简单使用概述(二)

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

Quartz2D的简单使用概述(三)

这里交代一些作图时可能遇到的问题: 问题一:当同时画多条线时,在第一条线设置属性后,后面画的所有线都会延用这些属性来绘制.         其实解决的方法很简答,就是在绘制一条新的线条时重置下绘制的属性即可,比如,在画第一条是的属性设置是: CGContextSetLineWidth(ctx,12);    //线条宽度 [[UIColor redColor]set];                   //线条颜色 CGContextSetLineCap(ctx,kCGLineCapRoun

Quartz2D 之 简单介绍

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

QuartZ2D __ 简单用法 1

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

XMG Quartz2D的简单使用

// //  Quratz2DView.m //  Quartz2D // //  Created by 王宁 on 16/5/6. //  Copyright ? 2016年 ylshmacmini. All rights reserved. // #import "Quratz2DView.h" //[email protected]是一个二维绘图引擎,同时支持IOS和Mac系统 //最常用的功能. 截图/裁剪图片 2.自定义UI控件 最重要的作用 自定义UIView // 有些U

0092 数据类型、简单数据类型概述

8.1 数据类型简介 为什么需要数据类型 ? 在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型. 简单来说,数据类型就是数据的类别型号.比如姓名"张三",年龄18,这些数据的类型是不一样的. 变量的数据类型 ? 变量是用来存储值的所在处,它们有名字和数据类型.变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中.JavaScript 是一种弱类型或者说动态语言.这意味着不用提前声明变量的类型,

【iOS开发】Quartz2D的简单使用

画直线 //拿到当前画布 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.拼接图形(路径) // 设置线段宽度 CGContextSetLineWidth(ctx, 10); // 设置线段头尾部的样式 CGContextSetLineCap(ctx, kCGLineCapRound); // 设置线段转折点的样式 CGContextSetLineJoin(ctx, kCGLineJoinRound); // 设置颜色 CGConte

【iOS开发-80】Quartz2D画图简单介绍:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState

- (void)drawRect:(CGRect)rect { //获得当前上下文 CGContextRef ctx=UIGraphicsGetCurrentContext(); //把当前上下文状态保存在栈中 CGContextSaveGState(ctx); //缩放.移动处理(须要放在画图之前进行设置) CGContextScaleCTM(ctx, 0.5, 0.5); CGContextTranslateCTM(ctx, 100, 100); CGContextRotateCTM(ctx

[原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------