CoreGraphic
- public func UIGraphicsBeginImageContextWithOptions( size: CGSize, opaque: Bool, _ scale: CGFloat) - size是要截图的大小,opaque是否不透明,不透明生成的图片小点,scale代表比例,1倍按照size的分辨率进行输出,n倍乘以n,如果需要输出当前设备的分辨率,使用UIScreen.main.scale来获取最合适的比例,也可以直接传0,系统会自动获取合适的scale。沃日。这么简单。。。如果是录视频的话,就得用UIScreen.main.scale 
- CG框架的内存需要我们手动管理,记得结束的时候释放内存,比如UIGraphicsEndImageContext(); 
- 12345// 同时设置fill和stroke的颜色UIColor.green.set();// 下面俩个分别只设置一种UIColor.green.setStroke();UIColor.green.setFill();
- 如果是用UIKit方法获取到的context,那么坐标系原点在左上,否则用CG方法获取到的context坐标系原点在左下.调整左下坐标系到左上坐标系 1234567CGContextRef context = UIGraphicsGetCurrentContext(); if (context == NULL){NSLog(@"Error: No context to flip");return; }CGAffineTransform transform = CGAffineTransformIdentity;transform = CGAffineTransformScale(transform, 1.0f, -1.0f);transform = CGAffineTransformTranslate(transform, 0.0f, -size.height); CGContextConcatCTM(context, transform);
- 画虚线方法的各参数含义 12345678let path = UIBezierPath(rect: CGRect(x: 50, y: 50, width: 100, height: 100));UIColor.green.set();// 数组的值代表第一个线宽为6然后第二个线宽为2,第三个线宽为5.以此类推.// 空白也算一个线段,也参与计算宽度.所以如下所示就是第一个实线宽度为6,然后接下来的空白宽度为2,然后接下来的实线宽度为5然后接下来的空白宽度为6...以此类推let dashes:[CGFloat] = [6.0, 2.0, 5.0];// count要等于dashes数组的长度,phase表示跳过多少个点.如上数组所示,6就是6个点path.setLineDash(dashes, count: 3, phase: 0);path.stroke();
- 坐标系转换方法例如下面一种 12CGPoint convertedPoint =[outerView convertPoint:samplePoint fromView:grayView];- 有一个前提,就是两个View必须在同一个Window中. 
- Transform - transform形变的原点都是(0,0)如果想要以中点进行形变,需要改变这个默认原点 1context?.translateBy(x: center.x, y: center.y);
- 如果绘图的context不是UIGraphicsBeginImageContextWithOptions(rect.size, true, 0.0);那么所绘制的一切用let image = UIGraphicsGetImageFromCurrentImageContext();这个方法截图是只是一张黑色图片,相反如果绘图的context时ImageContext,那么截图可以正常显示出来,但是真实的屏幕上则只显示黑色。 - 为了截图不是黑色的图 1234UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, true, 0.0);view.layer.render(in: UIGraphicsGetCurrentContext()!);let image2 = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();
- UIRectFill:给自定rect填充一个矩形 UIRectFrame:给自定rect画一个边框 
- path.usesEvenOddFillRule. usesEvenOddFillRule顾名思义就是even-奇 odd-偶,奇偶规则 
- 画阴影 
| 
 | 
 | 
- 对文字的动画 - 关键点在于用CoreText创建出文字的路径,CoreText提供了对应的方法,代码如下 
| 
 | 
 | 
- TransparencyLayer透明图层.待研究 
- layerx的drawInContext方法 12345678910// 如果在此方法内不将ctx压入栈中会导致接下去的bezeirPath画图方法失效。原因是rectPath.stroke()// 是在当前ctx生效的,可是如果不压入栈中,当前的ctx就会为空UIGraphicsPushContext(ctx);let rectPath = UIBezierPath(rect: self.outsideRect);UIColor.black.setStroke();let dash = [5.0.cgfloatValue, 5.0.cgfloatValue];rectPath.lineWidth = 1.0;rectPath.setLineDash(dash, count: 2, phase: 0);rectPath.stroke();UIGraphicsPushContext(ctx);- 如果不选择 - UIGraphicsPushContext(ctx);这种方法,那么需要用到C的API画图1234567let rectPath = UIBezierPath(rect: self.outsideRect);ctx.addPath(rectPath.cgPath);ctx.setStrokeColor(UIColor.black.cgColor);ctx.setLineWidth(1.0);let dash = [5.0.cgfloatValue, 5.0.cgfloatValue];ctx.setLineDash(phase: 0, lengths: dash);ctx.strokePath();- 这样就不会依赖UIGraphicsGetCurrentContext. 
CoreGraphic的更多相关文章
- iOS 离屏渲染的研究
		GPU渲染机制: CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示. G ... 
- iOS 保持界面流畅的技巧 (转载)
		这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互. Index 演示项目 屏幕显示图像的原理 卡顿产生 ... 
- iOS中滤镜处理及相关内存泄漏问题的解决
		最近工作之余在做一个美图秀秀的仿品 做到滤镜这块的时候 自己就参考了网上几位博主(名字忘了记,非常抱歉)的博客,但是发现跟着他们的demo做的滤镜处理,都会有很严重的内存泄漏,于是就自己按照大体的思 ... 
- iOS离屏渲染简书
		更详细地址https://zsisme.gitbooks.io/ios-/content/chapter15/offscreen-rendering.html(包含了核心动画) GPU渲染机制: CP ... 
- 如何让iOS 保持界面流畅?这些技巧你知道吗
		如何让iOS 保持界面流畅?这些技巧你知道吗 作者:ibireme这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如 ... 
- autolayout autoresizing
		WWDC 2012 Session笔记——202, 228, 232 AutoLayout(自动布局)入门 这是博主的WWDC2012笔记系列中的一篇,完整的笔记列表可以参看这里.如果您是首次来到本站 ... 
- 据说是百度ios面试题
		百度面试题: 一面:知识点 Objective C runtime library: Objective C的对象模型,Block的底层实现结构,消息发送,消息转发,内存管理 CoreData : ... 
- 【原/转】UITableview性能优化总结
		UITableView作为ios中使用最频繁的控件之一,其性能优化也是常常要面对的,尤其是当数据量偏大并且设备性能不足时.本文旨在总结tableview的几个性能优化tips,并且随着认识的深入,本文 ... 
- 【iOS开发】多屏尺的自动适配 AutoLayout (纯代码方式)
		关于AutoLayout,最早从iOS6开始引入使用. 主要功能是使用约束,对视图进行相对布局,以适应不同屏尺的变换. 网上大量的资料都在介绍xib和storyboard,如何使用AutoLa ... 
随机推荐
- Office文档WEB端在线浏览(转换成Html)
			最近在做了一个项目,要求是对Office文档在线预览.下面给大家分享一下我的方法. 1.第一种方法(不建议使用)我是在网上搜了一个利用COM组件对office文档进行转换,但是此方法必须要装Offic ... 
- python3 subprocess 内存操作视频转换流格式
			import subprocessout = open('./tmp/sss.mp4','rb').read()p = subprocess.Popen(["./ffmpeg",& ... 
- Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比
			本博客强烈推荐: Java电子书高清PDF集合免费下载 https://www.cnblogs.com/yuxiang1/p/12099324.html 前言 在分布式系统中,我们广泛运用消息中间件进 ... 
- 使用iTextSharp來合併PDF檔
			using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ... 
- HDU-4004 The Frog's Games (分治)
			http://acm.hdu.edu.cn/showproblem.php?pid=4004 Problem Description The annual Games in frogs' kingdo ... 
- PyTorch基础——机器翻译的神经网络实现
			一.介绍 内容 "基于神经网络的机器翻译"出现了"编码器+解码器+注意力"的构架,让机器翻译的准确度达到了一个新的高度.所以本次主题就是"基于深度神经 ... 
- tensorflow(六)
			一.TensorBoard可视化工具 TensorBoard实现形式为web应用程序,这为提供分布式.跨系统的图形界面服务带来了便利. 1.使用流程 SummaryOps->Session--( ... 
- 指定linux 下默认python版本
			sudo rm -rf python sudo ln -s /usr/bin/python3 /usr/bin/python 
- MFC修改系统托盘的图标
			最近开始学习MFC,发现程序在任务栏,窗口和exe都使用的默认图标,那么,我们想使用自己的图标该如何做? 第一种方法: 1.我们将自己要使用的icon的图标导入项目中. 资源视图-->xx.rc ... 
- Matlab高级教程_第三篇:Matlab转码C/C++方式(混编)_第二部分
			这一部分通过一些实例来进行转码和调试的讲解: 1. 输入变量.输出变量和过程内变量的内存预分配 函数代码:函数名test function [A,B] = test( mark,num,array ) ... 
