Quartz2D知识点聚合

基本

     //画图片
UIImage *image = [UIImage imageNamed:@"阿狸头像"];
[image drawInRect:rect]; //字体
NSString *title = @"标题";
NSMutableDictionary *atr = [NSMutableDictionary dictionary];
atr[NSFontAttributeName] = [UIFont systemFontOfSize:15];
// atr[NSForegroundœColorAttributeName] = [UIColor greenColor];
[title drawInRect:CGRectMake(120, 20, 100, 20) withAttributes:atr]; //椭圆
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(10, 20, 70, 130)];
[path stroke]; //方形
UIBezierPath *path1 = [UIBezierPath bezierPathWithRect:CGRectMake(10, 200, 10, 50)]; [path1 stroke]; //圆角方形
UIBezierPath *path2 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(100, 30, 100, 100) cornerRadius:10];
[path2 stroke]; //一个角圆角
UIBezierPath *path3 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(210, 90, 80, 70) byRoundingCorners:UIRectCornerTopRight cornerRadii:CGSizeMake(20, 30)];
[path3 stroke]; //圆弧
UIBezierPath *path4 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(130, 230) radius:70 startAngle:0 endAngle:M_PI clockwise:YES];
[path4 stroke];
// 1.获得当前上下文
CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.拼接路径
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(10, 20)];
[path addQuadCurveToPoint:CGPointMake(200, 80) controlPoint:CGPointMake(100, 200)]; // 3. 添加路径到上下文
CGContextAddPath(ctx, path.CGPath); // 4.渲染上下文
CGContextStrokePath(ctx);

变换

    //变换
//平移
// CGContextTranslateCTM(ctx, 10, 20);
//旋转
CGContextRotateCTM(ctx, M_PI_4);
//缩放
CGContextScaleCTM(ctx, 1.2, 1.2);

上下文栈

  • 先保存或者还原上下文栈,再设置状态
// 1.获得当前上下文
CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.拼接路径
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(10, 20)];
[path addQuadCurveToPoint:CGPointMake(200, 80) controlPoint:CGPointMake(100, 200)]; // 3. 添加路径到上下文
CGContextAddPath(ctx, path.CGPath); //保存上下文
CGContextSaveGState(ctx); //设置上下文状态
CGContextSetLineWidth(ctx, 10);
[[UIColor redColor] set]; // 4.渲染上下文
CGContextStrokePath(ctx); // 2.拼接路径
path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(100, 80)];
[path addLineToPoint:CGPointMake(200, 200)]; // 3. 添加路径到上下文
CGContextAddPath(ctx, path.CGPath);
//还原上下文
CGContextRestoreGState(ctx);
//设置上下文状态
CGContextSetLineWidth(ctx, 5);
[[UIColor blueColor] set]; // 4.渲染上下文
CGContextStrokePath(ctx);

生成图片

    UIImage *image = [UIImage imageNamed:@"小黄人"];
UIGraphicsBeginImageContextWithOptions(image.size, YES, 0); [image drawAtPoint:CGPointZero]; NSString *str = @"小黄人"; [str drawAtPoint:CGPointZero withAttributes:nil]; image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

截图

  • 给定裁减区域再渲染
    //开启图片上下文
UIGraphicsBeginImageContext(view.frame.size);
//获得当前上下文
CGContextRef ctx = UIGraphicsGetCurrentContext(); //给定裁减区域-----
//渲染图片
[view.layer renderInContext:ctx]; //从当前上下文得到一张图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); //关闭图片上下文
UIGraphicsEndImageContext(); return image;

擦除

  • 先渲染到上下文,再擦除
 UITouch *touch = [touches anyObject];

    CGPoint point = [touch locationInView:self.imageView];

    //开启上下文
UIGraphicsBeginImageContextWithOptions(self.imageView.frame.size, NO, 0); //获得当前上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
//渲染到上下文
[self.imageView.layer renderInContext:ctx]; //获取擦除区域
CGRect rect = CGRectMake(point.x - 10, point.y - 10, 20, 20);
// 擦除上下文的内容
CGContextClearRect(ctx, rect); // 生成图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); _imageView.image = image;
// 关闭上下文
UIGraphicsEndImageContext();

Quartz2D知识点聚合案例的更多相关文章

  1. 白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。

    目录 一.导读 二.福利:账号借用 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! ...

  2. 白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧。

    目录 一.导读 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! 四.聚合分析 4.1 ...

  3. elasticsearch聚合案例--分组、求最大值再求最大值的均值

    一.需求 A.B.C代表3个用户,第二列代表各自的得分,求A.B.C的最好成绩以及A.B.C最好成绩的均值 A 10 A 11 A 13 B 11 B 11 B 12 C 10 C 10 C 11 C ...

  4. postgres多知识点综合案例

    使用到的知识点: 1.使用with临时存储sql语句,格式[with as xxx(), as xxx2() ]以减少代码: 2.使用round()取小数点后几位: 3.使用to_char()将时间格 ...

  5. pandas分组聚合案例

    美国2012年总统候选人政治献金数据分析 导入包 import numpy as np import pandas as pd from pandas import Series,DataFrame ...

  6. 细嚼JS闭包知识点及案例分析

    闭包是js开发惯用的技巧,什么是闭包? 闭包指的是:能够访问另一个函数作用域的变量的函数.清晰的讲:闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量.默认闭包的this指向windows. ...

  7. django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066

    1 聚合和分组 聚合:对一些数据进行整理分析 进而得到结果(mysql中的聚合函数) 1aggregate(*args,**kwargs) : 通过对QuerySet进行计算 ,返回一个聚合值的字典. ...

  8. 042 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 04 案例演示while循环的使用——循环输出英文字母

    042 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 04 案例演示while循环的使用--循环输出英文字母 本文知识点:案例演示while循环的使用2 ...

  9. 041 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 03 案例演示while循环的使用——求1到5的累加和

    041 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 03 案例演示while循环的使用--求1到5的累加和 本文知识点:案例演示while循环的使用1 ...

随机推荐

  1. [C#]从URL中获取路径的最简单方法-new Uri(url).AbsolutePath

    今天在写代码时遇到这样一个问题: 如何从字符串 "http://job.cnblogs.com/images/job_logo.gif" 中得到 "/images/job ...

  2. [IT学习]Greatwall

    1.evilcos 优雅 过城墙 如果没这个开源的关键解决方案怎么办呢?我给你一个永恒思路,技术贴请看: http://www.ibm.com/developerworks/cn/linux/l-cn ...

  3. rip是典型的距离矢量动态路由协议。Ospf是链路状态型的协议

    网络工程师十个常见面试问题-看准网 https://m.kanzhun.com/k-mianshiwenti/1465113.html 两者都属于IGP协议,rip是典型的距离矢量动态路由协议.Osp ...

  4. C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法

    以前这个问题困扰我多天最后查资料一大堆,最后最终攻克了,看到非常多人做C#串口都遇到相同的问题,所以写一篇博文,以便学习交流. 一定要在com实例化的时候设置ReceivedBytesThreshol ...

  5. java jdbc/ojdbc 链接oracle的三种方式

    方法一:使用service_name 连接oracle  jdbc:oracle:thin:@//:/<service_name> 例如: jdbc:oracle:thin:@//10.1 ...

  6. 从远程Linux Copy文件到本机 界面化操作

    1.安装SSHSecureShellClient 2.打开 3.设置1,然后打开2就可以操作了

  7. luogu 3804 【模板】后缀自动机

    学习一波后缀自动机 求字符串$S$的所有出现次数不为1的子串的出现次数乘上该子串长度的最大值 #include<iostream> #include<cstdio> #incl ...

  8. AutoIT: 句柄的妙用

    句柄是独一无二的,很多时候,Title,Command都可以用句柄来代替.以下写法是能够起一样的作用. $handle= WinGetHandle("autoit cn") $ct ...

  9. asp.net mvc4 新特性

    摘自:ASP.MVC Web编程 几种模板的解释

  10. 查询及删除重复记录的SQL语句

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from ...