绘制视图

作者: 喵喵嘟噜啡 | 来源:发表于2017-03-14 16:59 被阅读60次

当我们想要重绘某个视图的时候,我们不能直接调用drawRect:的方法,因为该方法为系统自动调用,我们手动调用无效,系统提供了两个方法让我们进行间接调用drawRect:来达到重绘视图的目的

方法一:重新绘制这个view

[self setNeedsDisplay];

方法二:重新绘制view的某个区域

[self setNeedsDisplayInRect:rect];

// 绘制一条贝赛尔曲线

- (void)p_drawCurve {

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextMoveToPoint(context, 100, 100);

// 绘制贝赛尔曲线

// 参数一:关联的绘制目标

// 参数二:控制点1的x坐标

// 参数三:控制点1的y坐标

// 参数四:控制点2的x坐标

// 参数五:控制点2的y坐标

// 参数六:终点的x坐标

// 参数七:终点的y坐标

CGContextAddCurveToPoint(context, 150, 50, 50, 200, 200, 100);

CGContextStrokePath(context);

}

// 画一个矩形

- (void)p_drawOneRect {

CGContextRef context = UIGraphicsGetCurrentContext();

// 绘制矩形

// 参数一:关联的绘制目标

// 参数二:绘制位置及大小

CGContextAddRect(context, CGRectMake(100, 100, 100, 100));

CGContextStrokePath(context);

}

// 绘制椭圆

- (void)p_drawEllipse {

CGContextRef context = UIGraphicsGetCurrentContext();

// 绘制椭圆

// 参数一:关联的绘制目标

// 参数二:绘制的位置及大小

CGContextAddEllipseInRect(context, CGRectMake(100, 100, 100, 100));

CGContextStrokePath(context);

}

// 绘制一条多端点的线

- (void)p_drawLines {

CGContextRef context = UIGraphicsGetCurrentContext();

CGPoint pointArray[] = {CGPointMake(100, 100), CGPointMake(200, 100), CGPointMake(200, 200), CGPointMake(100, 200)};

// 通过数组绘制一条多端点的线

// 参数一:关联的绘制目标

// 参数二:数组

// 参数三:数组元素个数

CGContextAddLines(context, pointArray, sizeof(pointArray) / sizeof(CGPoint));

// 设置填充的颜色

// 方法一:

CGContextSetRGBFillColor(context, 211.f / 255.f, 106.f / 255.f, 119.f / 255.f, 1.0);

// 方法二:

[[UIColor redColor] setFill];

// 闭合绘制路径,会从当前点绘制至起点

CGContextClosePath(context);

//    CGContextStrokePath(context);

//    // 填充闭合路径

//    CGContextFillPath(context);

// 绘制路径

CGContextDrawPath(context, kCGPathFillStroke);

}

// 绘制一条弧

- (void)p_drawArc {

CGContextRef context = UIGraphicsGetCurrentContext();

// 绘制一条弧

// 参数一:关联的绘制目标

// 参数二:原点的坐标x

// 参数三:原点的坐标y

// 参数四:半径

// 参数五:起始弧度

// 参数六:结束弧度

// 参数七:绘制方向(0为顺时针,1为逆时针)

CGContextAddArc(context, 100, 100, 50, 0, 135 * (M_PI / 180), 1);

CGContextStrokePath(context);

}

// 绘制一条线段

- (void)p_drawLine {

// 获取绘制目标,当绘制引擎调用drawRect方法进行视图渲染的时候,会自动为我们创建一个绘制目标,这个目标相当于一块画布,关联着我们需要绘制的内容

CGContextRef context = UIGraphicsGetCurrentContext();

// 设置一个起点的坐标,绘制系统会追踪至该点进行绘制

// 参数一:关联的绘制目标

// 参数二:起点的x坐标

// 参数三:起点的y坐标

CGContextMoveToPoint(context, 100, 100);

// 设置一条线上的端点

// 参数一:关联的绘制目标

// 参数二:该端点的x坐标

// 参数三:该端点的y坐标

CGContextAddLineToPoint(context, 200, 100);

// 设置描边的颜色

// 方法一:

CGContextSetRGBStrokeColor(context, 211.f / 255.f, 106.f / 255.f, 119.f / 255.f, 1.0);

// 方法二:

[[UIColor redColor] setStroke];

// 设置描边的宽度

CGContextSetLineWidth(context, 20);

// 描边

CGContextStrokePath(context);

}

相关文章

  • 常见面试问题概括

    UI视图相关 *TableView重用机制? 答: *视图绘制原理?如何实现异步绘制? 答:UIView绘制原理 ...

  • Android-自定义View

    [1] Android如何绘制视图? 当用户将Android视图引入焦点时,Android框架会引导视图进行绘制。...

  • OpenGL ES(GLKView+GLKViewControl

    GLKView使用OpenGL ES绘制内容的视图默认实现 1:初始化视图 context 绘制视图内容时使⽤用的...

  • Android单排上王者系列之Android性能优化

    Android视图的绘制流程 Android中视图的绘制会经历三个阶段即onMeasure()、onLayout(...

  • 视图绘制

    本文要点 事件传递视图响应图像显示原理卡顿掉帧原因绘制&异步绘制离屏渲染 先看一下UIView和CALayer区别...

  • 绘制视图

    一直没有一个好的绘制视图的笔记,今天整理一下,分享给大家:不多说,直接上代码。 一、核心绘图(C语言风格调用函数)...

  • 绘制视图

    当我们想要重绘某个视图的时候,我们不能直接调用drawRect:的方法,因为该方法为系统自动调用,我们手动调用无效...

  • 视图绘制

    视图绘制是调用drawRect:方法来实现的。对于AppKit中的各种界面控件,系统默认实现了不同控件的界面绘制和...

  • # UI视图相关

    UI视图相关 UITableView 事件传递&视图响应 图像显示原理 卡顿&掉帧 绘制原理&异步绘制 离屏渲染 ...

  • Metal 基本任务和概念 - 02

    使用金属绘制视图内容 创建一个MetalKit视图和一个渲染过程以绘制视图的内容。 概述 在此示例中,您将学习使用...

网友评论

    本文标题:绘制视图

    本文链接:https://www.haomeiwen.com/subject/jlehnttx.html