- (void)drawRect:(CGRect)rect {

// Drawing code

NSLog(@"drawRect自动调用");

//画图步骤

//获取上下文(/画笔/绘图环境)

CGContextRef context = UIGraphicsGetCurrentContext();

//设置画笔颜色

CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);

//线条的宽度

CGContextSetLineWidth(context, 4);

//开始画

//1.画一条直线

//    [self drawOneLineWith:context];

//2-1.画多条线

//    [self drawManyLines:context];

//2-2

//    [self drawManyLines2:context];

//3画虚线

//    [self drawDashLine:context];

//4 画矩形

//    [self drawRectShape:context];

//5.填充的矩形

//    [self drawFillRect:context];

//6 画椭圆

//    [self drawCircle:context];

//7.填充的椭圆

//    [self drawFillCircle:context];

//8 显示文字

//    [self drawText];

//9.显示图片

[self drawImage];

// 10绘制曲线

//11圆弧

}

#pragmark mark  11  圆弧

- (void)drawArc{

//画布

CGContextRef ctx = UIGraphicsGetCurrentContext();

CGContextBeginPath(ctx);

//圆弧

*  @param c          当前图形

*  @param x          圆弧的中心点坐标x

*  @param y          曲线控制点的y坐标

*  @param radius      指定点的x坐标值

*  @param startAngle  弧的起点与正X轴的夹角,

*  @param endAngle    弧的终点与正X轴的夹角

*  @param clockwise  指定1创建一个顺时针的圆弧,或是指定0创建一个逆时针圆弧

*

*/

CGContextAddArc(ctx, 100, 100, 50, 0,M_PI/2, 0);

CGContextSetLineWidth(ctx, 3); //线宽

//    CGContextStrokePath(ctx);//描线

CGContextFillPath(ctx);  //填充

}

#pragma mark   10  二次曲线

- (void)drawCurve {

// 获取当前图形,视图推入堆栈的图形,相当于你所要绘制图形的图纸

CGContextRef ctx = UIGraphicsGetCurrentContext();

// 创建一个新的空图形路径。

CGContextBeginPath(ctx);

//开始点

CGContextMoveToPoint(ctx, 160, 100);

/** * @brief 在指定点追加二次贝塞尔曲线,通过控制点和结束点指定曲线。

@param c 当前图形 * @param cpx 曲线控制点的x坐标 *

@param cpy 曲线控制点的y坐标 *

@param x 指定点的x坐标值 *

@param y 指定点的y坐标值 * */

CGContextAddQuadCurveToPoint(ctx, 160, 50, 190, 50);

CGContextSetLineWidth(ctx, 20);

CGContextSetStrokeColorWithColor(ctx, [UIColor brownColor].CGColor);

CGContextStrokePath(ctx);

}

#pragma makr -- 9 显示图片

- (void)drawImage{

[[UIImage imageNamed:@"收藏-128"] drawInRect:CGRectMake(0, 0, 100, 100)];

}

#pragma mark -- 8 显示文字

- (void)drawText{

//起点(attribute 中设这参数)

[@"aaabbbcccddd" drawAtPoint:CGPointMake(100, 100) withAttributes:NULL];

//

[@"asdfasdfaf" drawInRect:CGRectMake(100, 150, 200, 200) withAttributes:NULL];

}

#pragma mark -- 7 画填充的 椭圆

- (void)drawFillCircle:(CGContextRef)context{

//填充的颜色

[[UIColor redColor] setFill];

CGContextFillEllipseInRect(context, CGRectMake(40, 40, 200, 300));

}

#pragma mark -- 6 画椭圆

- (void)drawCircle:(CGContextRef)context{

CGContextStrokeEllipseInRect(context, CGRectMake(40, 40, 300, 200));

}

#pragma mark -- 5填充的矩形

- (void)drawFillRect:(CGContextRef)context{

//设置填充颜色

[[UIColor yellowColor] setFill];

CGContextFillRect(context, CGRectMake(40, 40, 250, 300));

}

#pragma mark --4画矩形

- (void)drawRectShape:(CGContextRef)context{

CGContextStrokeRect(context, CGRectMake(40, 40, 200, 300));

//同理(stroke 画图方法; 也有add..方法 )

//    CGContextAddRect(context,  CGRectMake(40, 40, 200, 300));

//    CGContextStrokePath(context);

}

#pragma mark -- 3 画虚线

- (void)drawDashLine:(CGContextRef)context{

//设置虚线类型

//    CGFloat lengths[] = {5,15,5}; //长5 空隙15 长5 ...

CGFloat lengths[] = {5,5};

CGContextSetLineDash(context, 0, lengths, sizeof(lengths)/sizeof(lengths[0]));

//    CGContextSetLineDash(<#CGContextRef c#>, <#CGFloat phase#>, <#const CGFloat *lengths#>, <#size_t count#>)

//phase 开始点 跳过多少个点数(0代表从头画)

//lengths 虚线的样式

//count 长度

//起点

CGContextMoveToPoint(context, 50, 50);

//画线

CGContextAddLineToPoint(context, 200, 200);

CGContextStrokePath(context);

//第二段设置成  直线 NULL

CGContextSetLineDash(context, 0, NULL, 0);

//需要重新设置起点

CGContextMoveToPoint(context, 200, 200);

CGContextAddLineToPoint(context, 250,400);

CGContextStrokePath(context);

}

#pragma mark --画多条线 (方式二)

- (void)drawManyLines2:(CGContextRef)context{

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

//计算数组中元素个数

//    int count  = sizeof(数组名)/size(sizeof(a[0]));

//个数

CGContextAddLines(context, point, sizeof(point)/sizeof(point[0]));

//闭合

CGContextClosePath(context);

//开始画

CGContextStrokePath(context);

}

#pragma mark --画多条线 (方式一)

- (void)drawManyLines:(CGContextRef)context{

//例如:三角形

CGContextMoveToPoint(context, 200, 100);

CGContextAddLineToPoint(context, 100, 200);

CGContextAddLineToPoint(context, 300, 200);

//回到起点

//    CGContextAddLineToPoint(context, 200, 100);

//按方法2 : 闭合(起点和终点连线)

CGContextClosePath(context);

CGContextStrokePath(context);

}

#pragma mark -- 1 画一条线

- (void)drawOneLineWith:(CGContextRef)context{

//起点

CGContextMoveToPoint(context, 50, 50);

//终点:画线

CGContextAddLineToPoint(context, 200, 200);

//开始画

CGContextStrokePath(context); //画线

  //CGContextFillPath(context);   //填充路径

}

CoreGraphics--画线/圆/矩形的更多相关文章

  1. 使用gimp画线、矩形、圆等

    使用gimp画线.矩形.圆等 https://blog.csdn.net/tody_guo/article/details/7628508 2012年06月03日 19:08:47 Tody Guo  ...

  2. PHP合成图片、生成文字、居中对齐、画线、矩形、三角形、多边形、图片抗锯齿、不失真 高性能源码示例

    function generateImg($source, $text1, $text2, $text3, $font = './msyhbd.ttf') { $date = '' . date ( ...

  3. H5中画图标签Canvas---画矩形,画线,画圆,渐变色,图形载入

    一: 1.鼠标监视坐标值 <!DOCTYPE html> <head> <meta charset=UTF-8> <title>canvas的演示< ...

  4. IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等

    // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affec ...

  5. OpenCV各种绘制调用:线,矩形,圆,椭圆,文字

    OpenCV提供了各种绘制接口,可以往图片里画各种东西,这种功能可以为以后在图像上标记一些信息方便调试 // drawcall.cpp: 定义控制台应用程序的入口点. // #include &quo ...

  6. 【液晶模块系列基础视频】4.1.X-GUI图形界面库-画线画圆等函数简介

    [液晶模块系列基础视频]4.1.X-GUI图形界面库-画线画圆等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地 ...

  7. 纯JS画点、画线、画圆的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. IOS 绘制基本图形( 画圆、画线、画圆弧、绘制三角形、绘制四边形)

    // 当自定义view第一次显示出来的时候就会调用drawRect方法- (void)drawRect:(CGRect)rect { // 1.获取上下文 CGContextRef ctx = UIG ...

  9. LCD编程_画点线圆

    上篇博客中进行了lcd的简单测试,这篇博客将进行更加复杂的测试——画点.画线.画圆.画线和画圆是在画点的基础上实现的,因此本篇博客重点实现画点操作. 先抛出这样的一个问题,已知: (x,y)的坐标: ...

随机推荐

  1. win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解决办法

    1)安装Oracle 11g 64位2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0)下载 instantclient-basic-win ...

  2. Storm InvalidTopologyException: null

    异常信息: backtype.storm.generated.InvalidTopologyException: null at backtype.storm.daemon.common$valida ...

  3. 部署JForum 2.1.9遇到的问题及解决方法

    1. 主要问题是出在连接数据库和创建表阶段,当我们配置好MySQL的各种参数后,创建表的时候会报错: 原因:主要是由于建表的SQL语句和MySQL的版本不一致导致的. 解决办法:简单来说,在MYSQL ...

  4. 导入礼包时,遇到file_get_contents读取的文本,去除空格、换行等的方法

    解决方法:正则替换: 代码:$gift_code_str = preg_replace('/((\s)*(\n)+(\s)*) /i ',',',file_get_contents($gift_cod ...

  5. 基于basys2驱动LCDQC12864B的verilog设计图片显示

    话不多说先上图 前言 在做这个实验的时候在网上找了许多资料,都是关于使用单片机驱动LCD显示,确实用单片机驱动是要简单不少,记得在FPGA学习交流群里问问题的时候,被前辈指教,说给我最好的指教便是别在 ...

  6. iOS 图片水印、图片合成文字或图片实现

    这个需求可能有时候会碰到,比如自己的照片加版权,打水印等 网上的方法,有不少感觉不全对,或者需求不是特全,这里我总结了3种场景下的需求: 1.本地图片合成文字 2.本地图片合成图片 3.网络图片先下载 ...

  7. JS日期时间加减实现

    首先,上代码 var diffDate = function(date, diff) { return new Date( Date.UTC( date.getUTCFullYear(), date. ...

  8. 字符串匹配KMP算法中Next[]数组和Nextval[]数组求法

    数据结构课本上给了这么一段算法求nextval9[]数组 int get_nextval(SString T,int &nextval[ ]) { //求模式串T的next函数修正值并存入数组 ...

  9. 【死磕Java并发】-----深入分析volatile的实现原理

      通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized.如果一个变量使用volatile,则它 ...

  10. java_XML_JAXB

    JAXB 可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal. 下面使用的是JDK ...