CGContextRef

以前很不喜欢写技术文章,现在越来越喜欢写了,还是古语说得好,好记性不如烂笔头,当自己总是掉入同一个坑之后,发现记笔记是一件很重要的事情,所以,也奉劝各位,为了不再三番两次的掉同一个坑,记笔记是一件非常重要的事情呀!!!
CGContextRef是系统库CoreGraphics里的一个画图的,至于有什么其他的功能,我没发现,欢迎各位看官指点一二。
以下代码都是写在UIView的-(void)drawRect:(CGRect)rect里的。
一、画直线

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);//设置线的颜色
CGContextSetLineWidth(context, 2);//设置线的宽度
CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
//画一条线
CGContextMoveToPoint(context, 30, 50);
CGContextAddLineToPoint(context, 100, 50);
CGContextStrokePath(context);

效果图:

4974A01C-8D04-4E12-B2D0-CFBB43A2767F.png

二、画多条线

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);//设置线的颜色
CGContextSetLineWidth(context, 2);//设置线的宽度
CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
//  同时依次画多条线
CGPoint lines[] = {
    CGPointMake(10.0, 90.0),
    CGPointMake(60.0, 60.0),
    CGPointMake(110.0, 90.0),
    CGPointMake(160.0, 60.0),
    CGPointMake(210.0, 90.0),
    CGPointMake(260.0, 60.0),
};
 //  参数二:线数组,参数三:线的个数
CGContextAddLines(context, lines, sizeof(lines)/sizeof(lines[0]));
CGContextStrokePath(context);

效果图:


A9F29A1B-8098-4C42-BA38-C01CA288E65D.png

三、画圆

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);//设置线的颜色
CGContextSetLineWidth(context, 2);//设置线的宽度
CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
CGContextSetRGBStrokeColor(context,1,1,1,1.0);//画笔线的颜色
CGContextSetLineWidth(context, 1.0);//线的宽度
//参数2:x 参数3:y 参数4:半径 参数5:开始的弧度 参数6:结束的弧度 参数7:顺时针:0 逆时针:1
CGContextAddArc(context, 100, 100, 15, 0, 2*PI, 0); //添加一个圆
 //  kCGPathFill,   绘制填充
     kCGPathEOFill, 奇偶规则
     kCGPathStroke,  绘制路径
     kCGPathFillStroke, 绘制路径加填充
     kCGPathEOFillStroke 描线
CGContextDrawPath(context, kCGPathFill); 

效果图:


E02AE7C1-A251-47CC-A3FB-E75DD3C16870.png
CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
CGContextDrawPath(context, kCGPathEOFill); //绘制填充

效果图:


B9956DBD-6D0D-4841-B35D-6FD97BB8AE00.png
CGContextDrawPath(context, kCGPathStroke);

效果图:
7DE2F53E-6ADB-4D65-95DF-1781E862E860.png
CGContextDrawPath(context, kCGPathFillStroke);

效果图:
42C4FEF5-E682-49BA-8101-2A515187A389.png
CGContextDrawPath(context, kCGPathEOFillStroke);

效果图:
FC358854-FE89-4AA6-85D9-CA0FAD0E406D.png

备注:画圆的这部分,我是没有从图上看出1,2还有4,5的模式有什么区别?

四、画弧

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
CGContextSetLineWidth(context, 2);//设置线的宽度
CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
 CGContextSetRGBStrokeColor(context, 1, 1, 1, 1);//改变画笔颜色
CGContextMoveToPoint(context, 100, 100);//开始坐标p1
CGContextAddArcToPoint(context, 150, 80, 150, 150, 40);
CGContextStrokePath(context);

效果图:


4D99BF41-1FB8-4C40-9545-FF5E3870482F.png

画弧的时候总是确定不好半径,我基本上是估算的,用上述例子,拿后面x的坐标减去开始点的x的坐标,150-100=50,说明半径肯定不超过50,想要圆弧比较好看,就设置了一个40。像这种两点加半径确定圆弧的,说实话,我也不知道确切的该怎么算,用圆的公式好像也算不对
五、画矩形

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
CGContextSetLineWidth(context, 2);//设置线的宽度
CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
CGContextStrokeRect(context,CGRectMake(100, 120, 50, 50));//画方框
CGContextFillRect(context,CGRectMake(120, 120, 50, 50));//填充框
CGContextStrokePath(context);//绘画路径

效果图:

B541B3E5-6D3A-412E-AE2A-2C8267B185DF.png
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2);//设置线的宽度
CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);//填充颜色
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);//线框颜色
CGContextAddRect(context,CGRectMake(140, 120, 60, 30));//画方框
CGContextDrawPath(context, kCGPathFillStroke);//绘画路径
F4394E6A-5CA4-4C08-9059-66DE718307FA.png
 CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2);//设置线的宽度
CGContextSetLineCap(context, kCGLineCapRound);//设置线的起始端的样式
CGContextSetLineJoin(context, kCGLineJoinRound);//设置线的连接样式
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0 green:1 blue:1 alpha:1].CGColor);//填充颜色
CGContextMoveToPoint(context, 160, 180);
CGContextAddArc(context, 160, 180, 30,  -60 * PI / 180, -120 * PI / 180, 1);
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke); //绘制路径
4245BB55-AC6D-43B6-93D0-CEAD2286DF3C.png
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
CGContextAddEllipseInRect(context, CGRectMake(160, 180, 60, 15)); //椭圆
CGContextDrawPath(context, kCGPathFillStroke);
2DA87CC8-218A-431D-A7E5-3D168611D02B.png
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色
CGPoint sPoints[3];//坐标点
sPoints[0] =CGPointMake(100, 220);//坐标1
sPoints[1] =CGPointMake(130, 220);//坐标2
sPoints[2] =CGPointMake(130, 160);//坐标3
CGContextAddLines(context, sPoints, 3);//添加线
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke);
9D49D6CA-652A-408C-80B8-8E9B71915C01.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容