基于CoreText的基础排版引擎之不带图片的排版引擎
- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    //步骤一:得到当前绘制画布上下文,用于后续将内容绘制在画布上
    CGContextRef context = UIGraphicsGetCurrentContext();
    //步骤二:将坐标系上下翻转。对于底层的绘制引擎来说,屏幕左下角是(0,0)坐标。而对于上层的UIKit来说,左上角是(0,0)坐标。所以我们为了之后的坐标系描述按UIKit来显示,这里做了一个坐标系上下翻转操作。翻转之后,底层和上层的(0,0)坐标就是重合的了。
    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
    CGContextTranslateCTM(context, , self.bounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    //步骤三:创建绘制区域
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddRect(path, NULL, self.bounds); 
//    CGPathAddEllipseInRect(path, NULL, self.bounds);
    //步骤四
    NSAttributedString *attString = [[NSAttributedString alloc] initWithString:@"ScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhangScottZhang"];
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString);
    CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(, [attString length]), path, NULL);
    //步骤五
    CTFrameDraw(frame, context);
    //步骤六
    CFRelease(frame);
    CFRelease(path);
    CFRelease(framesetter);
}
基于CoreText的基础排版引擎之不带图片的排版引擎的更多相关文章
- 基于bootstrap的轮播广告页,带图片和文字
		<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ... 
- 基于CoreText的基础排版引擎
		storyboard: 新建一个CTDisplayView:UIView 代码如下: #import "CTDisplayView.h" #import "CoreTex ... 
- iOS:基于CoreText的排版引擎
		一.CoreText的简介 CoreText是用于处理文字和字体的底层技术.它直接和Core Graphics(又被称为Quartz)打交道.Quartz是一个2D图形渲染引擎,能够处理OSX和iOS ... 
- 基于CoreText的排版引擎
		前言 本人今年主要在负责猿题库iOS客户端的开发,本文旨在通过分享猿题库iOS客户端开发过程中的技术细节,达到总结和交流的目的. 这是本技术分享系列文章的第三篇.本文涉及的技术细节是:基于CoreTe ... 
- mongodb底层存储和索引原理——本质是文档数据库,无表设计,同时wiredTiger存储引擎支持文档级别的锁,MMAPv1引擎基于mmap,二级索引(二级是文档的存储位置信息『文件id + 文件内offset 』)
		MongoDB是面向文档的数据库管理系统DBMS(显然mongodb不是oracle那样的RDBMS,而仅仅是DBMS). 想想一下MySQL中没有任何关系型数据库的表,而由JSON类型的对象组成数据 ... 
- StreamDM:基于Spark Streaming、支持在线学习的流式分析算法引擎
		StreamDM:基于Spark Streaming.支持在线学习的流式分析算法引擎 streamDM:Data Mining for Spark Streaming,华为诺亚方舟实验室开源了业界第一 ... 
- Fixflow引擎解析(一)(介绍) - Fixflow开源流程引擎介绍
		Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ... 
- v8引擎详解(摘)-- V8引擎是一个JavaScript引擎实现
		随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行JavaScript脚本.V8引擎就是为解决这一问题而生,在node中也 ... 
- 从0开发3D引擎(八):准备“搭建引擎雏形”
		大家好,现在开始本系列的第三部分,按照以下几个步骤来搭建引擎雏形: 1.分析引擎的需求 2.实现最小的3D程序 3.从中提炼引擎原型 4.一步一步地对引擎进行改进,使其具备良好的架构 5.实现与架构相 ... 
随机推荐
- flask 压缩json
			这样返回的json会被压缩 
- 设计node.js搭建多人博客的思路(不讲数据库)
			1.1.4:搭建多人博客 1.功能分析 搭建一个简单的多人注册,登录,发表文章及登出功能的博客 2.设计目标 未登录:主页左侧导航显示home.login.register,右侧显示已发表文章,发表日 ... 
- 线段树(segment tree)
			线段树是一种二叉搜索树,它的每一个结点对应着一个区间[L, R],叶子结点对应的区间就是一个单位区间,即L == R.对于一个非叶子结点[L, R],它的左儿子所表示的区间是[L, (L +R)/2] ... 
- 牛刀小试MySQL--GTID
			GTID的概念 何为GITD GTID(global transaction identifier)是全局事务标识符,在MySQL5.6版本中作为一个超级特性被推出.事务标识不仅对于Master(起源 ... 
- 深入浅出 JVM ClassLoader
			# 前言 在 JVM 综述里面,我们说,JVM 做了三件事情,Java 程序的内存管理, Java Class 二进制字节流的加载(ClassLoader),Java 程序的执行(执行引擎).我们也说 ... 
- HTML DOM querySelector() 方法
			Document 对象 实例 获取文档中 id="demo" 的元素: document.querySelector("#demo"); <!DOCTY ... 
- C#中的readonly跟const用法小结
			总结一下常量和只读字段的区别: 由来: 笔者也是在看欧立奇版的<.Net 程序员面试宝典>的时候,才发现自己长久以来竟然在弄不清出两者的情况下,混用了这么长的时间.的确,const与rea ... 
- 百度api查询多个地址的经纬度的问题
			在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬 ... 
- mysql游标中使用临时表
			有时候需我们要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题. 所谓临时表:只有在当前连接情况下 ... 
- cocoapods使用-库托管到svn或者github
			下拉svn库(自定义库或者第三方库)到工程中: 1. 若未安装,请安装cocoapods: http://www.cnblogs.com/sunjianfei/p/6089231.html ... 
