Quartz概述

Quartz是Mac OS X的Darwin核心之上的绘图层,有时候也认为是CoreGraphics.共有两种部分组成
 
Quartz Compositor,合成视窗系统,管理和合成幕后视图影像来建立Mac OS X使用者接口。
Quartz 2D,是ios和mac os x环境下的二维绘图引擎。
涉及内容包括:基于路径的绘图,透明度绘图,遮盖,阴影,透明层,颜色管理。防锯齿渲染,生成PDF,以及PDF元数据相关处理。
 
视图绘制
 
在ios上,所有的绘制,无论是否采用OpenGL、Quartz、UIKit、或者Core Animation-----都发生在UIView对象的区域内。视图定义绘制发生的屏幕区域。如果您使用系统提供的视图,绘制工作会自动得到处理。然而,如果您定义自己的定制视图,则必须自行提供绘制代码。
 
对于使用OpenGL进行绘制的应用程序。一旦建立了渲染表面,就必须使用OpenGL制定的绘制模型。
视图绘制周期
 
描绘系统会调用UIView对象的drawRect:方法,并向它传人一个包含需要重画的视图区域的矩形,触发视图更新的动作有如下几种:
对遮挡您的视图的其他视图进行移动或删除操作。
将视图的hidden属性声明设置为NO,使其从隐藏状态变为可见。
将视图滚出屏幕,然后再重新回到屏幕上。
显示调用视图的setNeedsDisPlay或者setNeedsDisplayRect:方法。
setNeedsDisplay是更新整个视图。
setNeedsDisplayInRect是更新视图的部分区域。
视图绘制实例FirstQuartz2D
 
 
CGContextRef context = UIGraphicsGetCurrentContext();   设置上下文
CGContextMoveToPoint            开始画线
CGContextAddLineToPoint        画直线
 
CGContextAddEllipseInRect     画一椭圆
CGContextSetLineCap       设置线条终点形状
CGContextSetLineDash  画虚线
CGContextAddRect   画一方框
CGContextStrokRect   指定矩形
CGContextStrokeLineWithWidth   指定矩形线宽度
CGContextStrokeLineSegments  一些直线
 
CGContextAddArc 画一曲线, 前两点为中心,中间两点为起始弧度,最后一数据位0则顺时针画,1则逆时针
CGContextAddArcToPoint(context,0,0,2,9,40);//线画两条线从point到第一点,从第一点到第2点的线 切割里面的圆。
CGContextSetShadowWithColor 设置阴影
CGContextSetRGBFillColor  这只填充颜色
CGContextSetRGBStrokeColor 画笔颜色设置
CGContextSetFillColorSpace  颜色空间填充
CGContextSetStrokeColorSpace颜色空间画壁设置
CGContextFillRect补充当前填充颜色的rect
CGContextSetAlaha透明度
 
 
CGContextTranslateCTM 改变画布的位置
CGContextSetLineWidth设置线的宽度
CGContextAddQuadCurveToPoint画曲线
CGContextStrokePath 开始绘制图片
CGContextDrawPath  设置绘制模式
CGContextClosePath 封闭当前线路
CGContextTranslateCTM(context,0,rect,size.height);
CGContextScaleCTM(context,1.0,-1.0,-1.0);翻转画布
CGContextSetInterpolationQuality背景内置颜色质量等级
CGImageCreateWithImageRect 从原图片中去小图。
 
字符串的写入可用NSString本身的画图方法 -(CGSize)drawInRect:(CGRect)rect withFont;(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode alignment:(UItextAlignment)alignment;来写进去即可
 
对图片放大缩小的功能就是慢了点
UIGraphicsBeginImageContext(newSize);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
 
CGColorGetComponents ()返回颜色的各个值,以及透明度,可用只读const float 来接受是个数组
 
画图片
 CGImageRefimage = CGImageRetain(img.CGImage);
CGContextDrawImage(context.CGRectMake(10.0,height-100.0,90.0,90.0),image);
 
实现渐变颜色填充方法
CGContextClip(context);
CGFloat color [] = 
{

204.0 / 255.0, 224.0 / 255.0, 244.0 / 255.0, 1.00,

29.0 / 255.0, 156.0 / 255.0, 215.0 / 255.0, 1.00,

0.0 / 255.0,  50.0 / 255.0, 126.0 / 255.0, 1.00,

};
 
CGGradientRef gradient= CGGradientCreateWithColorComponents(rgb,colors,NULL,sizeof(colors)/(sizeof(colors[0])*4));
CGColorSpaceRelease(rgb);
CGContextDrawLinearGradient(context,gradient,CGPointMake(0.0,0.0),CGPointMake(0.0,self.frame.size.height),KCGGradientDrawsBeforStartLocation);
 
注:画完图后,必须先用CGContextStrokePath来描线,即形状
后用CGContextFillPath来填充形状内的颜色。
 
填充一个路径的时候,路径里面的子路径都市独立填充的。假如是重叠的路径,决定一个点是否被填充,有两种规则
1、nonzero Winding number rule:非零绕数规则,假如一个点被从左到有跨过,计数器+1,从右到左跨过,计数器-1,最后,如果结果是0,那么不填充,如果是非零,那么填充。
2、event-odd rule;奇偶规则,假如一个点被跨过,那么是奇数,那么要被填充,和方向没有关系。
 

Function

Description

CGContextEOFillPath

使用奇偶规则填充当前路径

CGContextFillPath

使用非零绕数规则填充当前路径

CGContextFillRect

填充指定的矩形

CGContextFillRects

填充指定的一些矩形

CGContextFillEllipseInRect

填充指定矩形中的椭圆

CGContextDrawPath

两个参数决定填充规则,kCGPathFill表示用非零绕数规则,kCGPathEOFill表示用奇偶规则,kCGPathFillStroke表示填充,kCGPathEOFillStroke表示描线,不是填充

设置当一个颜色覆盖上另外一个颜色,两个颜色怎么混合

默认方式是

result = (alpha * foreground) + (1 - alpha) * background

CGContextSetBlendMode :设置blend mode.

CGContextSaveGState :保存blend mode.

CGContextRestoreGState:在没有保存之前,用这个函数还原blend mode.

CGContextSetBlendMode 混合俩种颜色

 
 
 
 
 

iOS开发 绘图详解的更多相关文章

  1. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  2. iOS开发——Block详解

    iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...

  3. iOS开发:详解Objective-C runTime

    Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...

  4. iOS开发-Runtime详解

    iOS开发-Runtime详解 简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [recei ...

  5. iOS开发——MVC详解&Swift+OC

    MVC 设计模式 这两天认真研究了一下MVC设计模式,在iOS开发中这个算是重点中的重点了,如果对MVC模式不理解或者说不会用,那么你iOS肯定学不好,或者写不出好的东西,当然本人目前也在学习中,不过 ...

  6. IOS开发之----详解在IOS后台执行

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 ...

  7. iOS开发--Bison详解连连支付集成简书

    "最近由于公司项目需要集成连连支付,文档写的不是很清楚,遇到了一些坑,因此记录一下,希望能帮到有需要的人." 前面简单的集成没有遇到什么坑,在此整理一下官方的集成文档,具体步骤如下 ...

  8. iOS开发-NSURLSession详解

    Core Foundation中NSURLConnection在2003年伴随着Safari浏览器的发行,诞生的时间比较久远,iOS升级比较快,AFNetWorking在3.0版本删除了所有基于NSU ...

  9. iOS 2D绘图详解(Quartz 2D)之概述

    前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView,虽然对CALayer及其子类很熟练,但是对Quartz 2D这个强大的框架仍然概念模棱两可.于是,决定学习下,暂定7篇文 ...

随机推荐

  1. 枚举进程——暴力搜索内存(Ring0)

    上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程. 一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...

  2. CodeForces 568B DP Symmetric and Transitive

    题意: 根据离散数学的内容知道,一个二元关系是一个二元有序组<x, y>的集合. 然后有一些特殊的二元关系,比如等价关系,满足三个条件: 自反性,任意的x,都有二元关系<x, x&g ...

  3. 淘宝的TProfile分析

    TProfile是一个用来抓取性能数据的工具.大概是去年的时候对其分析了一下,并将它改造成了用于分析学习开源产品时的一个trace工具(不是很完善,自己用够用).现在将之前的笔记翻出来,记录一下. 1 ...

  4. day01_11.break和continue

    1.continue 下一个(用next更加形象一点)整体的循环没有被破坏掉,而是跳到下一个循环单位中 <?php for($i=1;$i<=10;$i++){ if($i==4){ co ...

  5. spring AOP详解四

    AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等.AOP 实现的关键就在于 ...

  6. equal(),hashcode(),toString()方法的作用

    equal(),hashcode(),toString()方法的作用 这三个方法都是java.lang.Object的方法. equal();判断两对象是否相等hashcode();为对象在容器中添加 ...

  7. C++ Programming with TDD之二:CppUTest单元测试

    在之前一篇C++ Programming with TDD博客中,我带给大家gmock框架的简介(地址戳着里),今天我们继续本系列,带个大家C++中的单元测试框架CppUTest的介绍. CppUTe ...

  8. best coder #35-01<组合数学 || 概率数学>

    问题描述 一个盒子里有n个黑球和m个白球.现在DZY每次随机从盒子里取走一个球,取了n+m次后,刚好取完.DZY用这种奇怪的方法生成了一个随机的01串S[1⋯(n+m)].如果DZY第i次取出的球是黑 ...

  9. [BZOJ3535][Usaco2014 Open]Fair Photography

    [BZOJ3535][Usaco2014 Open]Fair Photography 试题描述 FJ's N cows (1 <= N <= 100,000) are standing a ...

  10. BZOJ 4819 [Sdoi2017]新生舞会 ——费用流 01分数规划

    比值最大 分数规划 二分答案之后用费用流进行验证. 据说标称强行乘以1e7换成了整数的二分. 不过貌似实数二分也可以过. #include <map> #include <cmath ...