CoreAnimation 之CATextLayer
如果你想在一个图层中显示文字,完全可以借助图层代理直接将Core Graphics写入图层的内容(这就是UILabel的精髓)。如果雨果寄宿于图层的视图,直接在图层上操作,其实相当繁琐。你要为每一个显示文字的图层创建一个能像图层代理一样工作的类,还要在逻辑上判断哪个图层需要显示哪个字符串,更别提还要记录不同的字体,颜色等等的属性。
万幸的是这是都是多余的,在CoreAnimation为我们提供了一个CALayer的子类CATextLayer,它以图层的形式包含了UILabel几乎所有的绘制特效,并且额外提供了一些新的特性。同样,在性能上,CATextLayer也比UILabel渲染快的多。在IOS6之前的版本,UILabel其实是通过WebKit来实现绘制的,这样就引起了大量文字时的性能压力。CATextLayer使用了CoreText,渲染的非常快。
以下是一段使用CATextLayer显示文字的简单代码:
CATextLayer *textLayer = [CATextLayer layer];
textLayer.frame = CGRectMake((i * arr.count + j)*_columnWidth + i*_typeSpace+_originSize.x + _typeSpace, CGRectGetHeight(self.frame) - height - _originSize.y - - size.width, _columnWidth, size.height);
textLayer.string = str;
textLayer.fontSize = 9.0;
textLayer.alignmentMode = kCAAlignmentCenter;
textLayer.foregroundColor = itemsView.backgroundColor.CGColor;
然而,不要忘记了一个特殊的属性——contentScale,用来决定图层内容应该以怎样的分辨率来渲染。contentScale并不关心屏幕的拉伸因素,拉伸比例默认为1.0.如果我们以Retina屏显示文字时,会造成文本像素化。我们需要手动设置CATextLayer的contentScale属性,如下:
textLayer.contentsScale = [UIScreen mainScreen].scale;
CATextLayer的font属性不是一个UIFont类型,而是一个CFTypeRef类型。这样可以根据你的具体需要来决定使用CGFontRef还是CTFontRef类型。同样字体大小也是用fontSize属性单独设置,因为CTFontRef和CGFontRef并不像UIFont一样包含点大小。
CoreAnimation 之CATextLayer的更多相关文章
- iOS开发CoreAnimation解读之三——几种常用Layer的使用解析
iOS开发CoreAnimation解读之三——几种常用Layer的使用解析 一.CAEmitterLayer 二.CAGradientLayer 三.CAReplicatorLayer 四.CASh ...
- iOS开发CoreAnimation解读之二——对CALayer的分析
iOS开发CoreAnimation解读之二——对CALayer的分析 一.UIView中的CALayer属性 1.Layer专门负责view的视图渲染 2.自定义view默认layer属性的类 二. ...
- iOS CoreAnimation详解(一) 有关Layer的动画
以前由于项目需要 也写了一些动画 ,但是知识不系统,很散.这段时间趁着项目完成的空袭,来跟着大神的脚步系统的总结一下iOS中Core Animation的知识点. 原博客地址:http://blog. ...
- 二、CoreAnimation之寄宿图详解
在之前的图层树中我们知道,可以使用CALayer对象创建一些有背景颜色的图层,其实使用CALayer,不仅可以利用其展示背景颜色,还可以展示图片.而这些展示内容,其实就是CALayer的寄宿图.这一节 ...
- 一、CoreAnimation之图层树详解
CoreAnimation :在字面意思为“核心动画”,但是如果您认为它仅仅是一个动画框架,那可能就要错过一些经典功能了.动画,只是CoreAnimation功能的一小部分,毕竟人家的源头是一个叫做L ...
- iOS CoreAnimation 核心动画
一 介绍 一组非常强大的动画处理API 直接作用在CALAyer上,并非UIView(UIView动画) CoreAnimation是所有动画的父类,但是不能直接使用,应该使用其子类 属性: dura ...
- ios基础篇(二十五)—— Animation动画(UIView、CoreAnimation)
Animation主要分为两类: 1.UIView属性动画 2.CoreAnimation动画 一.UIView属性动画 UIKit直接将动画集成到UIView类中,实现简单动画的创建过程.UIVie ...
- iOS关于CoreAnimation动画知识总结
一:UIKit动画 在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了: ...
- CoreAnimation方法汇总
使用CoreAnimation一般分为三个部分:1.创建执行动画的CALayer 2.创建动画 3.CALayer 添加Animation CoreAnimation是以锚点为基础. CoreAnim ...
随机推荐
- FPGA与simulink联合实时环路系列—开篇
FPGA与simulink联合实时环路系列—开篇 作为网络上第一个开源此技术,笔者迫不及待地想将此技术分享出来,希望大家多多支持.笔者从2011年接触FPGA以来,从各个方面使用FPGA,无论是控制. ...
- 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题
先要搞明白:最长公共子串和最长公共子序列的区别. 最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...
- js判断用户的浏览设备是移动设备还是PC
<script type="text/javascript"> function browserRedirect() { var sUserAgent = naviga ...
- UIDynamic - 推动行为: UIPushBehavior
用途: 从一个点移动到另外一个点; 相关属性: mode : UIPushBehaviorModeContinuous //推移模式 angle : setAngle //推移角度 magnitu ...
- Python 从零学起(纯基础) 笔记 之 深浅拷贝
深浅拷贝 1. import copy#浅拷贝copy.copy()#深拷贝copy.deepcopy()#赋值 = 2. 对于数字和字符串而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个 ...
- 【Codeforces715C&716E】Digit Tree 数学 + 点分治
C. Digit Tree time limit per test:3 seconds memory limit per test:256 megabytes input:standard input ...
- js jquery 页面加载初始化方法
js jquery 页面加载初始化方法 一.js页面加载初始化方法 // 1.在body里面写初始化方法. <body onload='init()'> </body> < ...
- XSS攻击测试代码
'><script>alert(document.cookie)</script>='><script>alert(document.cookie)&l ...
- 100_1小记ressons analysis
想到一首诗用以自勉: look to the master, follow the master, walk with the master, see through the master, beco ...
- 浅谈JavaScript中的defer,async
引言 开始重读<<JavaScript高级程序设计>>一书,看到关于JavaScript中关于defer.async的部分.网上查询了点资料,觉得蛮好的.现在总结下. defe ...