一、基本图形绘制-画线

Quarz 2D是一个二维绘图引擎,用它能够:
➤绘制图形:线条、三角形、矩形、圆、弧等
➤绘制文字
➤绘制\生成图片(图像)
➤读取\生成PDF
➤截取\裁剪图片
➤自定义UI控件

Quarz 2D实例:

Quarz 2D能做很多强大的事情,比如
➤裁剪图片\圆形裁剪,
➤ 涂鸦画板,
➤ 以及手势解锁,
➤ 报表(折线图,饼状图,柱状图)

自定义view

在你的view上画东西,首先你要明白“图形上下文(Graphics Context)”的概念

  • 图形上下文(Graphics Context):你可以想象理解成画板,它是一个CGContextRef类型的数据,属于CoreGraphics(核心绘图)框架。
  • 图形上下文的作用:
    ➤保存绘图信息、绘图状态
    ➤决定绘制的输出目标(绘制到什么地方)(输出的目标可以是PDF文件,Bitmap或者显示器的窗口上)
  • 相同的一套绘图序列,指定不同的Graphics Context,就可以将相同的图像绘制到不同的目标

☐ Quarz 2D提供了以下几种类型的图形上下文:

➢Bitmap Graphics Context
➢ PDF Graphics Context
➢Window Graphics Context
➢Layer Graphics Context
➢Printer Graphics Context

自定义view

  • 如何利用Quarz 2D绘制东西到view上?
    ➢首先得有图形上下文,因为它能保存绘图信息,并且决定着绘制到什么地方去
    ➢其次,哪个图形上下文必须跟view相关联,才嫩将内容绘制到view上面
  • 自定义View步骤:
    ➢新建一个类,继承自UIView
    ➢实现- (void)drawRect:(CGRect)rect方法,然后在这个方法中:
    • 取得跟当前view相关联的图形上下文
    • 绘制相应的图形内容---描述路径
    • 利用图形上下文绘制的所有内容渲染显示到view上

新建一个MuView类,继承自UIView
#import <UIKit/UIKit.h>
@interface MuView : UIView
@end
在故事版中拖拽一个UIView,让其绑定MuView类型
drawRect
#import "MuView.h"
@implementation MuView
- (void)drawRect:(CGRect)rect{
/*因为只有在drawRect这个方法里面才能获取到跟view的layer相关联的图形上下文
*rect是当前控件的bounds
*当这个view要显示的时候,才会调用drawRect绘制图形
*/
[self ..];

@end

.

  -(void)drawLine{
    //    1获取图形上下文
    //     目前我们所用的上下文都是以UIGraphics开头的
    //    CGContextRef Ref饮用  CG:目前使用到的类型和函数 一般都是CG开头 CoreGraphics
    CGContextRef ctf = UIGraphicsGetCurrentContext();

    //    2描述路径
    //    创建路径
    CGMutablePathRef path = CGPathCreateMutable();
    //设置起点
    //path:给哪个路径设置起点 CGAffineTransform:形变 x、y代表起点
    CGPathMoveToPoint( path, NULL, 50, 50);

    //添加一根线到某个点
    CGPathAddLineToPoint(path, NULL, 200, 200);

    //    3把路径添加到上下文
    CGContextAddPath(ctf, path);
    //    4渲染上下文
    CGContextStrokePath(ctf);


}

.

- (void)drawLine1{
    //    获取上下文
    CGContextRef ref = UIGraphicsGetCurrentContext();
    //    描述路径
    //    设置起点 在这底层会帮我们创建一个path
    CGContextMoveToPoint(ref, 150, 150);
    CGContextAddLineToPoint(ref, 50, 50);

    //    渲染上下文
    CGContextStrokePath(ref);
}

.

-(void)drawLine2{
 //UIKIT已经帮我们封装了一些绘图的功能
UIBezierPath *path = [UIBezierPath bezierPath];
//    设置起点
[path moveToPoint:CGPointMake(50, 50)];
//    添加一根线到某个点
[path addLineToPoint:CGPointMake(100, 100)];
//    绘制路径
[path stroke];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容