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. Semantic Parsing(语义分析) Knowledge base(知识图谱) 对用户的问题进行语义理解 信息检索方法

    简单说一下所谓Knowledge base(知识图谱)有两条路走,一条是对用户的问题进行语义理解,一般用Semantic Parsing(语义分析),语义分析有很多种,比如有用CCG.DCS,也有用机 ...

  2. Delphi的函数指针

    不求全面,先留个爪: TNotifyEvent = procedure(Sender: TObject) of object; TMethod = record Code, Data: Pointer ...

  3. 【SDOI 2014】 旅行

    [题目链接] 点击打开链接 [算法] 树链剖分 每个宗教建一棵线段树,注意数据量大,要动态开点 [代码] #include<bits/stdc++.h> using namespace s ...

  4. 【转】iOS笔记-自定义控件(OC)

    原文网址:http://www.jianshu.com/p/f23862eb7b8a 导读: iOS开发中,很多时候系统提供的控件并不能很好的满足我们的需求,因此,自定义控件便成为搭建UI界面中必不可 ...

  5. bzoj4196 [Noi2015]软件包管理器——树链剖分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4196 树链剖分. 代码如下: #include<iostream> #inclu ...

  6. Image2Caption

    定义 图像标注或语言生成图像问题把计算机视觉与自然语言处理联系在了一起,是广义的人工智能领域的一大难题.通常涉及到特征提取(用cnn提取出图像内部不为人类感知的向量特征)和语言模型建立.为图像提取文字 ...

  7. hdu4975 A simple Gaussian elimination problem.(最大流+判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4975 题意:和hdu4888基本一样( http://www.cnblogs.com/a-clown/ ...

  8. P2210 Haywire(A*)

    P2210 Haywire 题目描述 Farmer John有N只奶牛,(4 <= N <= 12,其中N是偶数). 他们建立了一套原生的系统,使得奶牛与他的朋友可以通过由干草保护的线路来 ...

  9. bzoj2131: 免费的馅饼(树状数组)

    Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度W(1到10^8之间)和馅饼的个数n(1到10^5). 接下来n行,每一行给出了一块馅饼的信息.由三个正整数组成 ...

  10. logstsh | logstash-input-jdbc 启动错误收集

    1: Failed to execute action {:action=>LogStash::PipelineAction::Create/pipeline_id:main, :excepti ...