iOS开发CGContextRef画图使用总结

 更新时间:2022年04月27日 08:10:02   作者:夕阳下的守望者  
这篇文章主要为大家详细介绍了iOS开发CGContextRef画图使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家汇总了iOS开发CGContextRef画图使用,供大家参考,具体内容如下

1.创建画布

CGContextRef ctx = UIGraphicsGetCurrentContext();

2.设置属性

//旋转,注意:设置操作必须要在添加图形之前,如果设置在添加图形之后的话,此时它已经画完了,无效
//旋转的时候,是整个layer都旋转了
//旋转45度
CGContextRotateCTM(ctx, M_PI_4);
//缩放:x方向缩放0.5倍,y方向缩放1.5倍
CGContextScaleCTM(ctx, 0.5, 1.5);
//平移:x方向移动50,y方向移动100
CGContextTranslateCTM(ctx, 50, 100);
CGContextSetLineJoin(ctx, kCGLineJoinRound);
//线条宽度
CGContextSetLineWidth(ctx, 1.0);
//起点和终点圆角
CGContextSetLineCap(ctx, kCGLineCapRound);
//转角圆角
CGContextSetLineJoin(ctx, kCGLineJoinRound);
//透明度
CGContextSetAlpha(ctx, 0.5)

3.画直线

//起点
CGContextMoveToPoint(ctx, 10.0, 100.0);
//终点
CGContextAddLineToPoint(ctx, self.frame.size.width-20.0, 100.0);
//颜色 两种设置颜色的方式都可以
//CGContextSetRGBStrokeColor(ctx, 0, 1.0, 0, 1.0);
[[UIColor redColor] set];
//渲染,直线只能绘制空心的,不能调用CGContextFillPath(ctx)
// 或者使用这个方法:CGContextDrawPath(ctx, kCGPathStroke);
CGContextStrokePath(ctx);

或者使用下面方法画直线

CGPoint point[2];//坐标点  
point[0] = CGPointMake(10.0, 100.0);//起点  
point[1] = CGPointMake(self.frame.size.width-20.0, 100.0);//终点   
//points[]坐标数组,和count大小  
CGContextAddLines(context, aPoints, 2);//添加线  
CGContextDrawPath(context, kCGPathStroke);

4.画虚线

//设置虚线颜色
CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);
//设置虚线绘制起点
CGContextMoveToPoint(ctx, 10.0, 50.0);
//设置虚线绘制终点
CGContextAddLineToPoint(ctx, self.frame.size.width-20.0, 50.0);
//设置虚线排列的宽度间隔:下面的arr中的数字表示先绘制3个点再绘制1个点
CGFloat arr[] = {3, 2};
//下面最后一个参数“2”代表排列的个数。
CGContextSetLineDash(ctx, 0, arr, 2);
CGContextDrawPath(ctx, kCGPathStroke);

5.画三角形

//起点
CGContextMoveToPoint(ctx, self.center.x, 200.0);
//拐点1
CGContextAddLineToPoint(ctx, self.center.x-50.0, 250.0);
//终点
CGContextAddLineToPoint(ctx, self.center.x+50.0, 250.0);
//颜色 两种设置颜色的方式都可以
//CGContextSetRGBStrokeColor(ctx, 0, 1.0, 0, 1.0);
[[UIColor redColor] set];
//合并三角形
CGContextClosePath(ctx);
CGContextFillPath(ctx);

6.画矩形

CGRect rectangle = CGRectMake(10.0, 300.0, self.frame.size.width-20.0, 60.0);
CGContextAddRect(ctx, rectangle);
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
CGContextFillPath(ctx);

7.画圆

/**
c           当前图形
x           圆心坐标x
y           圆心坐标y
radius      半径
startAngle  弧的起点与正X轴的夹角
endAngle    弧的终点与正X轴的夹角
clockwise   指定0创建一个顺时针的圆弧,或是指定1创建一个逆时针圆弧
*/
CGContextAddArc(ctx, self.center.x, 100.0, 75.0, 0.0, M_PI+0.5, 0);
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
CGContextFillPath(ctx);

8.画椭圆

CGContextAddEllipseInRect(ctx, CGRectMake(x, y, 100.0, 60.0));
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
CGContextFillPath(ctx);

9.画扇形

CGContextMoveToPoint(ctx, x, y);
CGContextAddArc(ctx, x, y, 75.0, 0.0, M_PI+0.5, 0);
CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
CGContextSetStrokeColorWithColor(ctx, [UIColor blueColor].CGColor);
CGContextDrawPath(ctx, kCGPathFillStroke);

10.画二次贝塞尔曲线

CGContextMoveToPoint(context, 120, 300);//设置Path的起点  
CGContextAddQuadCurveToPoint(context,190, 310, 120, 390);//设置贝塞尔曲线的控制点坐标和终点坐标  
CGContextStrokePath(context);

11.画三次贝塞尔曲线

CGContextMoveToPoint(context, 200, 300);//设置Path的起点  
CGContextAddCurveToPoint(context,250, 280, 250, 400, 280, 300);//设置贝塞尔曲线的控制点坐标和控制点坐标终点坐标  
CGContextStrokePath(context);

12.画文字

// 设置文字的属性
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[NSForegroundColorAttributeName] = [UIColor whiteColor];
dict[NSFontAttributeName] = [UIFont systemFontOfSize:14];
[@"I Love iOS" drawInRect:rect withAttributes:dict];

13.画图片

UIImage *image = [UIImage imageNamed:@"apple.jpg"];  
[image drawInRect:CGRectMake(60, 340, 20, 20)];//在坐标中画出图片  
//[image drawAtPoint:CGPointMake(100, 340)];//保持图片大小在point点开始画图片,可以把注释去掉看看  
CGContextDrawImage(context, CGRectMake(100, 340, 20, 20), image.CGImage);//使用这个使图片上下颠倒了      
//CGContextDrawTiledImage(context, CGRectMake(0, 0, 20, 20), image.CGImage);//平铺图 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • ios实现简易队列

    ios实现简易队列

    这篇文章主要为大家详细介绍了ios实现简易队列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 举例讲解设计模式中的原型模式在iOS应用开发中的作用

    举例讲解设计模式中的原型模式在iOS应用开发中的作用

    这篇文章主要介绍了设计模式中的原型模式在iOS应用开发中的作用,示例代码为传统的Objective-C,需要的朋友可以参考下
    2016-04-04
  • ios微信浏览器返回不刷新问题完美解决方法

    ios微信浏览器返回不刷新问题完美解决方法

    这篇文章主要介绍了ios微信浏览器返回不刷新问题完美解决方法,需要的朋友可以参考下
    2017-09-09
  • Objective-C中关于实例所占内存的大小详解

    Objective-C中关于实例所占内存的大小详解

    这篇文章主要给大家介绍了关于Objective-C中实例所占内存的大小的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • iOS创建对象的不同姿势详解

    iOS创建对象的不同姿势详解

    这篇文章主要介绍了iOS创建对象的不同姿势,文中介绍的很详细,对大家具有一定的参考价值,有需要的朋友们下面来一起学习学习吧。
    2017-02-02
  • xcode 左边导航栏中符合含义详解

    xcode 左边导航栏中符合含义详解

    这篇文章主要介绍了xcode 左边导航栏中符合含义详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • iOS开发之运动事件和远程控制

    iOS开发之运动事件和远程控制

    在iOS中事件分为三类:触摸事件:通过触摸、手势进行触发(例如手指点击、缩放),运动事件:通过加速器进行触发(例如手机晃动),远程控制事件:通过其他远程设备触发(例如耳机控制按钮)今天我们来详细探讨下运动事件和远程控制
    2016-04-04
  • iOS实现列表折叠效果

    iOS实现列表折叠效果

    这篇文章主要为大家详细介绍了iOS实现列表折叠效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • iOS系统和微信中不支持audio自动播放问题的解决方法

    iOS系统和微信中不支持audio自动播放问题的解决方法

    最近在微信端开发H5的时候,audio标签在苹果机上无法进行自动播放,查找相关资料终于解决了,所以下面这篇文章主要给大家介绍了关于iOS系统和微信中不支持audio自动播放问题的解决方法,需要的朋友可以参考下。
    2017-09-09
  • IOS获取各种文件目录路径的方法

    IOS获取各种文件目录路径的方法

    ios获取文件路径的方法,iphone沙箱模型的四个文件夹,通过documents,tmp,app,Library得到模拟器路径的简单方式,下面小编整理相关资料,把IOS获取各种文件目录路径的方式总结如下,需要的朋友可以参考下
    2015-08-08

最新评论