//
// Quratz2DView.m
// Quartz2D
//
// Created by 王宁 on 16/5/6.
// Copyright © 2016年 ylshmacmini. All rights reserved.
//
#import "Quratz2DView.h"
//Quartz@2D是一个二维绘图引擎,同时支持IOS和Mac系统
//最常用的功能。 截图/裁剪图片 2.自定义UI控件 最重要的作用 自定义UIView
// 有些UI界面机器复杂,普通的UI控件无法实现。此时使用Quartz2D 将结构绘制出来
//其实,IOS 中大部分控件内容都是通过Quartz2D
//图形上下文对象 理解为一个画板/画布
@implementation Quratz2DView
/**
如何利用Quartz2D绘制东西到view上去 上下文对象分为5种类型
*
* 首先得有上下文对象,它可以保存对象,决定着绘制的位置
其次。那个图形上下文对象必须跟view有关系 ,才可以将内容绘制到view上去
*/
/**
* 绘制的3个步骤
1.拿到图形上下文对象 (获取上下文对象)
2.绘制相关的图形内容 (描述路径)
3.利用图形上下文所绘制的内容渲染显示到view上去 (做渲染操作)
*/
//首先要拿到图形上下文对象,也就是画布
//画板的作用
//1. 保存绘图的信息和 状态
// 2.决定输入目标。决定输入到什么位置上面
/**
* 输出目标可以为pdf,bitmap 或者是窗口上
绘图的三步
i.绘制的图形
ii.保存上下文
iii 显示出来,输出目标
相同的一套绘图序列,指定不同的Graphics Context 可以将相同的东西绘制到不同的对象上去
layer相当于图层
*/
// CGContextRef contextRef=cgcontext
//通常在drawRect方法中进行绘图
//为什么要在drawRect方法中绘图。为什么要在这个方法里面?? 因为只有在这个方法里面才可以获得跟当前view的layer相关的上下文对象
//什么时候调用drawRect方法,当这个View要显示的时候会调用 所以说这个方法只会调用一次 先调用viewDidLoad -->viewWillAppear-->此方法,因为这个时候View即将显示--->viewDidAppear
//这个rect是当前控件的bounds 值
-(void)drawRect:(CGRect)rect
{
//UIKit 已经封装了一些绘图的功能
//贝泽尔路径 .封装了好多的形状 对上下文的封装
//创建路径
UIBezierPath*path=[UIBezierPath bezierPath];
[path setLineWidth:20];
[path setLineCapStyle:kCGLineCapSquare];
//设置起点
[path moveToPoint:CGPointZero];
//添加某条线
[path addLineToPoint:CGPointMake(200, 200)];
//绘制路径
[path stroke];
}
#pragma mark - drawLine2
-(void)drawLine2{
//一版以CG开头的都是CoreGraphics
CGContextRef ref=UIGraphicsGetCurrentContext();
//不需要创建路径了,什么东西直接往上下文添加
CGContextMoveToPoint(ref, 40, 40);
CGContextAddLineToPoint(ref, 100, 100);
CGContextSetLineWidth(ref, 20);
CGContextSetLineCap(ref, kCGLineCapSquare);
[[UIColor redColor] set];
//渲染
CGContextStrokePath(ref);
}
#pragma mark - drawLine
-(void)drawLine{
//画一条线要有一个起点
// CGContextRef ref=
/**
1. 获得图形上下文
2. 描绘路径
3. 保存在上下文中
4. 渲染
*/
//目前我们所用的上下文都是UIGraphics开头的
//1. 获得图形上下文 Ref 引用的意思 CG 目前使用到的类型和函数
//一版以CG开头的都是CoreGraphics
CGContextRef ref=UIGraphicsGetCurrentContext();
//2.创建路径
CGMutablePathRef path= CGPathCreateMutable();
//想要画条线,必须要有一个起点 .const CGAffineTransform * _Nullable m 形变.不要形变了给个NULL
CGPathMoveToPoint(path, NULL, 50, 50);
//画一条线
CGPathAddLineToPoint(path, NULL, 200, 200);
//画的线的颜色
[[UIColor redColor]set];
//设置线条的粗细
CGContextSetLineWidth(ref, 12);
CGContextSetLineCap(ref, kCGLineCapRound);
//给上下文对象添加路径 。跟上下文有关系
CGContextAddPath(ref, path);
//渲染跟上下文有关系
CGContextStrokePath(ref);
}
//加载完xib进入该方法
-(void)awakeFromNib{
}
@end