iOS开发-Quartz2D初识

Quartz2D如果单独的从Quartz,那么会发现Quartz是一个开源的Java作业调度框架,单独从英文翻译的角度来看的话Quartz的英文是石英,如果有的时候不小心搜索会发现手表推荐。本文中介绍的Quartz是位于MAC OS X的Drawin核心之上的绘图层,有时候也认为是CoreGraphics。Quartz直接地支持Aqua,借由显示2D绘图图形来创建用户接口,包含实时绘制(rendering)和次像素(sub-pixel)精准的反锯齿,由Quartz Compositor和Quartz 2D组件组成。

Quartz2D简介

Quartz Compositor是指合成视窗系统,管理和合成幕后视窗视频来创建Mac OS X用户接口,Quartz 2D以PDF的规范为基础的图形库,用来绘制二维文字和图形。

Quartz 2D是在MAC OS X中的主要绘图函式库。它取代早期版本的MAC OS(现在称为"Classic")所使用的QuickDraw。Quartz 2D是以Adobe PDF(一种统一的档案格式,不管在那个平台上建立,在任何来源的文件中保留所有的字型,格式,颜色,以及绘图)1.4版本为基础。他是源自NeXT的Display PostScript后代。Quartz 2D与QuickDraw在数个关键领域有所不同。

QuickDraw天生地以raster图形为基础,基本的绘图元素是像素。Quartz 2D替代地使用更数学的方法,座标空间是二维实数所定义的抽象观念。在这个空间的点可以被连线起来形成路径,像是直线,贝兹曲线等等。要在显示器上建立实际上的影像,那些路径就会被点阵化在显示器装置分辨率下用来产生像素。这样允许相同的绘图指令可以在任何装置上,使用可以得到的最佳分辨率,来产生相同的输出。就像在PostScript,路径可以被划线成为外框,直线以此类推,且封闭的路径可以被填满而创造出实体的形状。文字是简单地由路径产生,然后形成文字标记的形状。

在iOS上,所有的绘制,无论是否采用OpenGL、Quartz、UIKit、或者 Core Animation—都发生在UIView对象的区域内。视图定义绘制发生的屏幕区域。可以自己写一个集成UIView的类,然后自己绘制需要的图形(如三角形),绘制文字,绘制图片,读取PDF,截图(UIImagePicker截取图片)等常用功能。

Quartz2D工作原理

一般有点开发经验的应该都会听说过上下文,搞过ASP.NET MVC的都知道,微软提供的EF上下文简直就是开发者福利,其他语言也有,大概就是两个对象相互操作的一个桥梁,EF是数据层和控制器层交互必备,iOS中如果想绘制图片,也离不开上下文,具体先来看一段代码,需要新建一个View继承子UIView,默认的就会有一个drawRect方法

调用自定义的View中的drawRect:方法之前,视图对象会自动配置其绘制环境,使代码可以立即进行绘制。作为这些配置的一部分,UIView对象会为当前绘制环境创建一个图形上下文(对应于CGContextRef封装类型)。该图形上下文包含绘制系统执行后续绘制命令所需要的信息,定义了各种基本的绘制属性,比如绘制使用的颜色、裁剪区域、线的宽度及风格信息、字体信息、合成选项、以及几个其它信息。

- (void)drawRect:(CGRect)rect {

    CGContextRef context = ();
    //设置起始点
    CGContextMoveToPoint (context, 160, 100);
    CGContextAddLineToPoint (context, 100, 180);
    CGContextAddLineToPoint (context, 160, 180);
    // 设置边界
    [[UIColor blackColor] setStroke];
    //填充颜色
    [[UIColor redColor] setFill];
    //绘制路径
    CGContextDrawPath(context, kCGPathFillStroke);

}

Quartz2D是一个C语言框架,其API是纯C语?的,Quartz2D的API来自于Core Graphics框架,代码中实例化了一个UIGraphicsGetCurrentContext上下文,绘制图形,通过上下文设置图形的输出路径,最终效果就是一个直角三角形:

代码的调用很简单,如果方法不是很熟悉可以查找一下,大概原理还是比较简单,如果不是很清晰,可以接下来看一张苹果官网的图:

有五种可用的上下文实例供我们选择使用,Printer,PDF,Bitmap,Layer,Window使用,Window,Printer用于OS X~开发中一般用到是Btimap,Layer较多,关于PDF的需要根据业务来看,接下来再看一段代码就是一个圆形: 

  //获取上下文
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGRect rect = CGRectMake(50, 200, 200, 200);
    //是否有边框
//    UIRectFrame(rect);
    //矩形中添加一个椭圆
    CGContextAddEllipseInRect(context, rect);

    [[UIColor greenColor] setStroke];

    //设置绿色背景
    [[UIColor greenColor] setFill];

    // 3. 绘制路径
    CGContextDrawPath(context, kCGPathFillStroke);

最终效果如下:

时间: 2024-10-26 23:50:20

iOS开发-Quartz2D初识的相关文章

iOS开发 - Quartz2D绘图

Quartz 2D简介 是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 - - drawRect:方法的使用 常见图形的绘制:线条.多边形.圆 绘图状态的设置:文字颜色.线宽等 图形上下文状态的保存与恢复 图形上下文栈 为了便于搭建美观的UI界面,iOS提供了UIKit框架,里面有各种各样的UI控件 UILabel:显示文字 UIImag

iOS开发_初识视频直播

一.使用第三方ijkPlayer框架开发直播 1.去到B站得github主页,找到ijkplayer项目,下载源码 ijkplayer下载地址 2.Demo的使用以及如何编译Demo 请移步如何快速的开发一个完整的iOS直播app(播放篇) 其实里面讲的很详细,我也是参照这个写的Demo.然后在他的基础上加了一点东西.(不废话我直接上我的代码) 先看看效果图 特点 1.纯代码Masonry布局 2.集成ijkplayer第三方库,实现拉流播放 3.打包ijkplayer静态库,实现release

iOS开发 - Quartz2D绘制小黄人

Quartz2D绘制小黄人 - (void)drawRect:(CGRect)rect { // 1.上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.身体 drawBody(ctx, rect); // 3.嘴(微笑) drawMouth(ctx, rect); // 4.画眼睛 drawEyes(ctx, rect); } /** * 眼睛 */ void drawEyes(CGContextRef ctx, CGRect

IOS开发之---初识Block

正文 Block简介 我们可以把Block当做Objective-C的匿名函数.Block允许开发者在两个对象之间将任意的语句当做数据进行传递,往往这要比引用定义在别处的函数直观.另外,block的实现具有封闭性(closure),而又能够很容易获取上下文的相关状态信息. Block的创建 实际上,block使用了与函数相同的机制:可以像声明函数一样,来声明一个bock变量:可以利用定义一个函数的方法来定义一个block:也可以将block当做一个函数来调用. 1 // main.m 2 #im

iOS开发Quartz2D 三 进度条的应用

一:效果如图: 二:代码 #import "ViewController.h" #import "ProgressView.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *valueTitle; @property (weak, nonatomic) IBOutlet ProgressView *progressView; @end @implementati

iOS开发之初识CoreData

这是一个HitList import UIKit import CoreData class ViewController: UIViewController,UITableViewDataSource { var names = [String]() var people = [NSManagedObject]() @IBOutlet weak var tableView: UITableView! override func viewWillAppear(animated: Bool) {

iOS开发-Quartz2D绘制时定时器选择

NSTimer定时器 [NSTimer scheduledTimerWithTimeInterval:0.025 target:self selector:@selector(update) userInfo:nil repeats:YES]; //如果我们使用NSTimer定时器. 设置的执?行时间为0.025秒, 假如屏幕刷新时间为0.035.中间就会等待0.010//绘制图形的时候不建议使用该方法 CADisplayLink定时器 补充知识: drawRect方法是在view将要显示,已经

iOS开发Quartz2D 十三:画板涂鸦

一:效果如图: 二:代码 #import "ViewController.h" #import "DrawView.h" #import "HandleImageView.h" @interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate,handleImageViewDelegate> @property (we

iOS开发UI篇—Quartz2D使用(绘图路径)

iOS开发UI篇-Quartz2D使用(绘图路径) 一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径  cgmutablepathref 调用该方法相当于创建了一个路径,这个路径用来保存绘图信息. 2.把绘图信息添加到路径里边. 以前的方法是点的位置添加到ctx(图形上下文信息)中,ctx 默认会在内部创建一个path用来保存绘图信息. 在图形上下文中有一块存储空间专门用来存储绘图信息,其实这块空间就是CGMutablePa