热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【iOS开发80】Quartz2D画图简单介绍:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState

-(void)drawRect:(CGRect)rect{获得当前上下文CGContextRefctxUIGraphicsGetCurrentContext();把当前上下文状态保

技术分享

技术分享


- (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


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
author-avatar
佳品h空投
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有