CoreGraphics

CoreGraphics中最关键的部分是一个名为Quartz 2D的API集合,它包含了各种函数、数据类型以及对象,能够让大家在内存中直接绘制视图和图像。

CoreGraphics框架几个重要概念:

画布(page):Quartz 2D将正在进行绘制的视图视作一个虚拟的画布,在画布上用画笔画画,就必须遵循一定的规则,例如,绘制的内容是有先后顺序的。
路径(Path):当你拿到一支画笔时,就能够随心所欲地在画纸上绘画,画笔移动的轨迹就是路径。
绘图上下文(Graphics Context):绘图上下文有时也称为绘图环境。绘图上下文中会保存绘图的信息和状态,并负责将图形绘制在视图上,即绘图的输出终端(Drawing Destination)。

在使用CoreGraphics框架对视图进行绘图操作时,UIView中如下的几个方法需要程序员重点关注,这涉及绘图的时机。

drawRect方法:当视图每次需要进行自身重新绘制时都会调用该方法,所以如果在drawRect:
方法中插入视图绘制的代码,那么这段绘图代码就会起效,从而对视图进行重绘。该方法会被系统自动调用。
-(void)drawRect:(CGRect)rect;
setNeedDisplay方法:当手工调用这个方法时,会调用drawRect:方法进行绘图,但该方法是异步执行的,
即不是立即调用drawRect:方法进行绘图,而是在屏幕每次刷新后才会调用。
-(void)setNeedsDisplay;

UIBezierPath类属于UIKit框架,主要用于绘图中设置绘图的路径。在CoreGraphics中,也提供了CGPath类以及CGContext类可以用于绘图。

UIBezierPath类主要用于创建一个路径对象,因此在UIBezierPath类中提供了创建各种类型路径的方法,例如直线路径、曲线路径等。

// 实例化一个贝塞尔路径对象。
+(UIBezierPath *)bezierPath;
// 初始化矩形路径。
+(UIBezierPath *)bezierPathWithRect:(CGRect)rect;
// 初始化一个圆角的矩形路径。
+(instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius;
// 初始化椭圆形路径。
+(UIBezierPath *)bezierPathWithOvalInRect:(CGRect)rect;
// 初始化弧形路径。需要设置四个参数,包括弧形的圆心点、弧度以及起始、终止角度。
+(UIBezierPath *)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;
// 设置当前绘图所在的点位,即设置画笔当前的位置。
-(void)moveToPoint:(CPoint)point;
// 从绘图当前点位绘制一条直线到目标点位。
-(void)addLineToPoint:(CGPoint)point;
// 从绘图当前点位绘制一条圆弧到目标点位,弧度需要由控制点controlPoint决定。
-(void)addQuadCurveToPoint:(CGPoint) endPoint controlPoint:(CGPoint)controlPoint;
// 封闭当前的路径
-(void)closePath;
// 填充路径所封闭的区域。
-(void)fill
// 画线
-(void)stroke;

绘图方法和步骤

1.drawRect:方法的调用时机

drawRect:方法是UIView类定义中的方法,视图每次需要进行自身重新绘制时都会调用该方法,所以如果在drawRect:方法中插入绘图代码,那么这段绘图代码就会起效,从而对视图进行重绘

drawRect:方法主要在如下几个情形下会被调用。

当视图第一次显示到屏幕之前。
当调用视图的setNeedDisplay或者setNeedDisplayInRect:方法,通知重新绘图时。
调用sizeToFit方法后,会调用drawRect:方法。

2.常见的绘图步骤:当在drawRect:方法中进行绘图时,一般会遵循如下的步骤进行:

获得图形上下文(取得画布),需要调用UIGraphicsGetCurrentContext()函数。
设置路径(绘图),通常使用贝塞尔路径。
设置绘图上下文的属性与状态,如是否填充,填充颜色等。
添加路径到上下文,调用CGContextAddPath()函数。
渲染上下文,调用CGContextStrokePath()函数,输出绘图图像到屏幕。

示例
-(void)drawRect:(CGRect)rect {
    // 获取绘图上下文
    CGContextRef contect = UIGraphicsGetCurrentContext();
    // 设置绘图路径
    // 创建路径
    UIBezierPath *path = [UIBezierPath bezierPath];
    // 创建起始点
    CGPoint startPoint = CGPointMake(5, 5);
    CGPoint secondPoint = CGPointMake(50, 95);
    CGPoint thirdPoint = CGPointMake(95, 5);
    // 画线
    [path moveToPoint:startPoint];
    [path addLineToPoint:secondPoint];
    [path addLineToPoint:thirdPoint];
    [path closePath];
    // 设置线的属性
    [[UIColor redColor] setStroke];
    // 设置填充颜色
    [[UIColor yellowColor] setFill];
    [path fill];

    // 设置线边的宽度
    CGContextSetLineWidth(context, 3.0);
    // 添加路径到上下文
    CGContextAddPath(context, path.CGPath);
    // 渲染上下文
    CGContextStrokePath(context);
}

常用绘制方法

绘制直线
-(void)drawRect:(CGRect)rect {
    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值