在学习《小码哥底层原理笔记:性能优化》中 “尽量使用轻量级的对象,比如用不到事件处理的地方,可以考虑使用CALayer取代UIView” 所以就学习了一下UIlabel的替代品 CATextLayer。
CATextLayer
Core Animation提供了的CALayer的子类,它以图层的形式包含了UILabel几乎所有的绘制特性,并且额外提供了一些新的特性。同样,CATextLayer也要比UILabel渲染得快得多。很少有人知道在iOS 6及之前的版本,UILabel其实是通过WebKit来实现绘制的,这样就造成了当有很多文字的时候就会有极大的性能压力。而CATextLayer使用了Core text,并且渲染得非常快。
先介绍一下CATextLayer相关的一些属性:
string
id类型, No Animatable(不支持动画)。要显示的文本,类型可以使NSString或者NSAttributedString,默认值为nil。
font
CFTypeRef类型, No Animatable。使用的字体,只有当string类型为NSString时才有效。默认Helvetica字体。CFTypeRef 只是一个占位符,font支持的类型有NSString、CTFontRef、CGFontRef,其中NSString 必须是支持的字体名称。
// 设置textLayer的字体为Bradley Hand
textLayer.font = (__bridge CFTypeRef _Nullable)(@"Bradley Hand");
fontSize
CGFloat类型, Animatable。字体大小,只有当string类型为NSString时才有效。默认36.0。
foregroundColor
CGColorRef类型, Animatable。文本颜色,默认不透明白色。动画效果仅支持OS X 10.6以上版本,不支持IOS。
wrapped(isWrapped)
BOOL类型, No Animatable。自动换行。
truncationMode
NSString *, No Animatable。当字符串显示不全的时候的裁剪方式。可选以下值:
NSString * const kCATruncationNone; // 不剪裁,默认
NSString * const kCATruncationStart; // 剪裁开始部分
NSString * const kCATruncationEnd; // 剪裁结束部分
NSString * const kCATruncationMiddle; // 剪裁中间部分
alignmentMode
NSString *, No Animatable。字符串对齐方式。
NSString * const kCAAlignmentNatural; // 自然对齐,默认
NSString * const kCAAlignmentLeft; // 左对齐
NSString * const kCAAlignmentRight; // 右对齐
NSString * const kCAAlignmentCenter; // 居中
NSString * const kCAAlignmentJustified; // 两端对齐
让我们来尝试用CATextLayer来显示一些文字。
@interface ViewController