【iOS开发-80】Quartz2D画图简单介绍:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
- (void)drawRect:(CGRect)rect {
//获得当前上下文
CGContextRef ctx=UIGraphicsGetCurrentContext(); //把当前上下文状态保存在栈中
CGContextSaveGState(ctx); //缩放、移动处理(须要放在画图之前进行设置)
CGContextScaleCTM(ctx, 0.5, 0.5);
CGContextTranslateCTM(ctx, 100, 100);
CGContextRotateCTM(ctx, M_PI_4); //描点
CGContextMoveToPoint(ctx, 10, 10);
CGContextAddLineToPoint(ctx, 100, 100);
CGContextAddLineToPoint(ctx, 150, 50);
//下面两种方式均可闭环
//CGContextAddLineToPoint(ctx, 10, 10);
CGContextClosePath(ctx);
//渲染画图,实心和空心
CGContextStrokePath(ctx);
//CGContextFillPath(ctx); //把当前上下文状态保存在栈中
CGContextSaveGState(ctx); //画正方形
CGContextAddRect(ctx, CGRectMake(100, 100, 50, 50));
//设置线宽(一定要在CGContextStrokePath之前)
//由于之前有过一次渲染画图,所以这个属性设置不影响上面的那个三角形,下面颜色设置同理
//所以,假设想分别设置两个或多个图形的属性,就分别渲染画图一次
CGContextSetLineWidth(ctx, 10);
//设置颜色(同理。属性设置的代码都要在画图的代码之前)
CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);
CGContextStrokePath(ctx); //设置样式
CGContextMoveToPoint(ctx, 20, 160);
CGContextAddLineToPoint(ctx, 200, 280);
CGContextAddLineToPoint(ctx, 250, 200);
CGContextSetLineWidth(ctx, 20);
//设置头尾样式
CGContextSetLineCap(ctx, kCGLineCapRound);
//设置转角样式
CGContextSetLineJoin(ctx, kCGLineJoinRound);
CGContextStrokePath(ctx); //把保存在栈中的上下文状态取出来,恢复。 上面那段代码设置的样式不会影响其它
CGContextRestoreGState(ctx); //画椭圆
CGContextAddEllipseInRect(ctx, CGRectMake(200, 130, 60, 30));
//下面等价
//CGContextStrokePath(ctx);
CGContextDrawPath(ctx, kCGPathStroke); //画圆形
CGContextAddEllipseInRect(ctx, CGRectMake(140, 170, 50, 50));
CGContextSetLineWidth(ctx, 3);
CGContextStrokePath(ctx); //画圆弧
CGContextAddArc(ctx, 200, 50, 50, M_PI_4, M_PI, 1);
CGContextStrokePath(ctx); //画1/4圆,以及颜色的设置新方法
CGContextMoveToPoint(ctx, 10, 230);
CGContextAddLineToPoint(ctx, 10, 280);
CGContextAddLineToPoint(ctx, 60, 280);
CGContextAddArc(ctx, 10, 280, 50, 0, -M_PI_2, 1);
[[UIColor greenColor] setStroke];
CGContextStrokePath(ctx); //画图片和文字(不须要手动取得上下文)
NSString *str1=@"辛丑年一空作";
[str1 drawAtPoint:CGPointZero withAttributes:nil];
UIImage *img=[UIImage imageNamed:@"001"];
[img drawAtPoint:CGPointMake(10, 10)];
//在一个框框里重叠图片并署名
CGRect rect1=CGRectMake(50, 50, 100, 100);
[img drawAsPatternInRect:rect1];
NSMutableDictionary *attr=[[NSMutableDictionary alloc]init];
attr[NSForegroundColorAttributeName]=[UIColor whiteColor];
attr[NSFontAttributeName]=[UIFont systemFontOfSize:13];
[str1 drawInRect:CGRectMake(50, 140, 100, 100) withAttributes:attr]; //把保存在栈中的上下文状态取出来,恢复。上面那段代码设置的样式不会影响其它
CGContextRestoreGState(ctx); //裁剪圆形头像
CGContextAddEllipseInRect(ctx, CGRectMake(150, 150, 100 , 100));
//依照圆形剪裁出一个上下文区域,以后的内容就填充在这个圆形上下文中
CGContextClip(ctx);
UIImage *img1=[UIImage imageNamed:@"me"];
[img1 drawAtPoint:CGPointMake(150, 150)];
}
【iOS开发-80】Quartz2D画图简单介绍:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState的更多相关文章
- 【iOS开发-80】Quartz2D绘图简介:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState
本文转载至 http://blog.csdn.net/weisubao/article/details/41282457 - (void)drawRect:(CGRect)rect { //获得当前上 ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
- iOS开发UI篇—Modal简单介绍
iOS开发UI篇—Modal简单介绍 一.简单介绍 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展⽰出来 Modal的默认效果:新控制器从屏幕的 ...
- iOS开发数据库篇—SQLite简单介绍
iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...
- iOS开发UI篇—Kvc简单介绍
ios开发UI篇—Kvc简单介绍 一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observ ...
- iOS开发UI篇—UIWindow简单介绍
iOS开发UI篇—UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...
- iOS开发多线程篇—NSOperation简单介绍
iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现 ...
- iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
随机推荐
- D - Replacement
Problem description Little Petya very much likes arrays consisting of n integers, where each of them ...
- 使用jquery通过AJAX请求方式,后台返回了当前整个HTML页面代码
该结果分为多种情况: 1.当前项目使用了interceptor/filter,拦截或者过滤了特定请求. 2.在HTML页面使用了表单提交,没有对表单的“onsubmit”事件做return false ...
- Git教程(3)git工作区与文件状态及简单示例
基础 目录: working driectory 工作目录,就是我们的工作目录,其中包括未跟踪文件及暂存区和仓库目录. staging area 暂存区,不对应一个具体目录,其实只是git di ...
- 2.sql server的管理
sql server的管理:需要安装sql server 2005或者sql server 2008,若要使用sqlserver管理工具进行开发还要安装sql server management st ...
- python--6、re模块
re模块 用于在正则表达式匹配操作. python中为了避免实现输出'\','\n'字符的转义问题(如正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python ...
- hibernate_04_hbm.xml介绍
先贴上类文件Students.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC & ...
- SQL Server存储过程作业(三)
阶段4:练习——插入入住客人记录 需求说明 使用存储过程将入住客人信息插入客人信息表中,要求: 检查身份证号必须是18个字符组成 押金的默认值为1000元 如果客人记录插入成功,输出客人流水号:否则输 ...
- 解决Fiddler抓包上不了网的问题:
以前安装Fiddler 没有配置过相关设置,经常出现就是打开fiddler后,浏览器就无法上网了,刚开始觉得可能是因为而公司上网是需要自己的代理的,但fiddler打开后默认127.0.0.1作为IE ...
- DNN:windows使用 YOLO V1,V2
本文有修改,如有疑问,请移步原文. 原文链接: YOLO v1之总结篇(linux+windows) 此外: YOLO-V2总结篇 Yolo9000的改进还是非常大的 由于原版的官方YOLOv ...
- 在MFC中使用Cstring
此文介绍了关于MFC使用CString的资料,可一参考一下. 转自于VC知识库:http://www.vckbase.com/index.php/wv/829 通过阅读本文你可以学习如何有效地使用 C ...