【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的优点 使用起来 ...
随机推荐
- Cracking the Coding Interview 8.7
Given a infinite number of quarters(25cents), dimens(10cents), nickels(5cents) and pennies(1cent), w ...
- POJ 1470 Tarjan算法
裸的LCA,读入小坑.Tarjan算法大坑,一开始不知道哪儿错了,后来才发现,是vis数组忘了清零了(⊙﹏⊙)b 傻傻的用了邻接矩阵...很慢啊,1100多ms. Closest Common Anc ...
- GO 协程 通道实例以及验证SnowFlake算法
最近项目中使用了SnowFlake算法产生ID,并在实际运行环境下会产生重复ID,所以写了一个Go的程序进行验证,顺便也练习一下Go的协程与通道. 至于GO的协程和通道的基础知识请自行百度. 代码如下 ...
- JavaScript中字符串运算符的使用
字符串运算符是用于两个字符串型数据之间的运算符,它的作用是将两个字符串连接起来.在JavaScript中,可以使用+和+=运算符对两个字符串进行连接运算.其中,+运算符用于连接两个字符串,而+=运算符 ...
- Linux rsync配置用于服务器之间传输大量的数据
Linux的rsync 配置,用于服务器之间远程传大量的数据 [教程主题]:rsync [课程录制]: 创E [主要内容] [1] rsync介绍 Rsync(Remote Synchronize ...
- OpenCV中IplImage/CvMat/Mat转化关系
原文链接:http://www.cnblogs.com/summerRQ/articles/2406109.html 如对内容和版权有何疑问,请拜访原作者或者通知本人. opencv中常见的与图像操作 ...
- 【sqli-labs】 less43 POST -Error based -String -Stacked with tiwst(POST型基于错误的堆叠变形字符型注入)
和less42一样 login_user=&login_password=1');insert into users(id,username,password) value(15,'root' ...
- Apex语言(七)集合
1.集合 集合是可以存储多个记录数的变量类型. List列表集合可以包含任何数量的数据,与数组类似. Set列表集合包含多个无序的唯一记录数,集合不能具有重复记录,与列表类似. Map地图是一个键值对 ...
- Hadoop-2.2.0在Unbuntu ADM64中需要重新编译Native Lib
通过:cat /etc/issue 查看当前系统版本: Ubuntu 12.04.3 通过:uname -ar 查看更想起信息: Linux ubuntu-236 3.8.0-29-generic # ...
- javeee 字节Buffered
package Zy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io. ...