CATextLayer是专用的文本显示图层,有和UILaber一样的显示功能,只是CATextLayer的文本渲染功能更加强大,效率更高。
接下来看一些CATextLayer的属性:
@property(nullable, copy) id string;文本内容,NSString或者NSAttributedString
@property(nullable) CFTypeRef font;文本字体,CTFontRef, CGFontRef或者是一个font的名字,默认为Helvetica,非NSAttributedString适用
@property CGFloat fontSize;文本字体大小,默认为36,非NSAttributedString适用,可做动画
@property(nullable) CGColorRef foregroundColor;文字颜色,默认为白色,非NSAttributedString适用,可做动画
@property(getter=isWrapped) BOOL wrapped;是否自动换行,默认为NO
@property(copy) NSString *truncationMode;文本显示不全时的裁剪方式
kCATruncationNone 不裁剪,默认
kCATruncationStart 裁剪开始部分
kCATruncationEnd 裁剪结束部分
kCATruncationMiddle 裁剪中间部分
@property(copy) NSString *alignmentMode;文本对齐模式
kCAAlignmentNatural 自然对齐,默认
kCAAlignmentLeft 左对齐
kCAAlignmentRight 右对齐
kCAAlignmentCenter 中间对齐
kCAAlignmentJustified 两边对齐
CATextLayer *textLayer = [CATextLayer layer];
textLayer.bounds = CGRectMake(0, 0, 150, 150);
textLayer.position = CGPointMake(self.view.bounds.size.width/2, 240);
textLayer.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1.0].CGColor;
textLayer.foregroundColor = [UIColor redColor].CGColor;
textLayer.fontSize = 20;
textLayer.wrapped = YES;
textLayer.truncationMode = kCATruncationNone;
textLayer.alignmentMode = kCAAlignmentCenter;
textLayer.string = @"我以为,饭要一口一口吃,路要一步一步走,步子迈大了,喀~ 容易扯着蛋";
//contentScale决定内容的渲染方式,在Retina的屏幕上如果没有这样设置,文本就不会以Retina的形式渲染,可能出现文本像素化的现象。
textLayer.contentsScale = [UIScreen mainScreen].scale;
[self.view.layer addSublayer:textLayer];
textLayer.png
NSAttributedString可以实现富文本,UILabel、UITextField和UITextView都有attributedText属性来设置富文本,当然NSAttributedString也可以直接作用在CATextLayer上的,对于不需要交互的控件,使用CATextLayer实现富文本可以有更高的渲染效率。这里对NSAttributedString的特性进行一个简单的介绍:
NSFontAttributeName文本字体字号属性,默认为Helvetica,12号字体
NSParagraphStyleAttributeName文本段落排版格式
NSForegroundColorAttributeName字体颜色,取值UIColor,默认黑色
NSBackgroundColorAttributeName字体背景色,取值UIColor, 默认无背景色
NSLigatureAttributeName连体属性,取值NSNumber,0表示没有连体字符,1表示连体字符,默认为1
NSKernAttributeName字间距,取值NSNumber,正值表示间距加宽,负值表示间距收缩,默认值为0
NSStrikethroughStyleAttributeName删除线,取值NSNumber,默认0
NSStrikethroughColorAttributeName删除线颜色,取值UIColor,默认黑色
NSUnderlineStyleAttributeName下划线,取值NSNumber,默认0
NSUnderlineColorAttributeName下划线颜色,取值UIColor,默认黑色
NSStrokeWidthAttributeName画笔宽度,取值NSNumber,负值填充,正值中空
NSStrokeColorAttributeName文本填充部分颜色,非字体颜色,取值UIColor
NSShadowAttributeName阴影属性,取值NSShadow
NSTextEffectAttributeName文本特殊效果,目前只有图版印刷效果
NSBaselineOffsetAttributeName基线偏移值,取值NSNumber(float),正值上偏,负值下偏
NSObliquenessAttributeName字体倾斜度,取值NSNumber(float),正值右偏,负值左偏
NSExpansionAttributeName字体横向拉伸度,取值NSNumber(float),正值拉伸,负值压缩
NSWritingDirectionAttributeName文本书写方向,从左向右或从右向左
NSVerticalGlyphFormAttributeName文字排版方向,NSNumber,0表示横向的,1表示竖向的
NSLinkAttributeName链接属性,点击就使用浏览器打开链接
NSAttachmentAttributeName文本附件,取值NSTextAttachment,常用于图文混排
NSAttributedString分为NSAttributedString和NSMutableAttributedString两种,这里使用NSMutableAttributedString实现一个简单的富文本:
//第一种富文本形式,先创建可变富文本,再修改富文本属性
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"Sometimes ever\nSometimes never"];
//字体设置
[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:25] range:NSMakeRange(0, 9)];
[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:35] range:NSMakeRange(10, 4)];
[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:35] range:NSMakeRange(25, 5)];
//字间距设置
[attributedString addAttribute:NSKernAttributeName value:[NSNumber numberWithInteger:4] range:NSMakeRange(15, 9)];
//画笔宽度
[attributedString addAttribute:NSStrokeWidthAttributeName value:[NSNumber numberWithInteger:3] range:NSMakeRange(10, 4)];
//字体填充色
[attributedString addAttribute:NSStrokeColorAttributeName value:[UIColor redColor] range:NSMakeRange(10, 4)];
//字体颜色
[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(25, 5)];
//字体基线偏移
[attributedString addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithInteger:22] range:NSMakeRange(15, 9)];
[attributedString addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithInteger:10] range:NSMakeRange(25, 5)];
//第二种创建富文本的方式,创建文本属性字典,然后将属性字典设置为对应字段的属性
//NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"Sometimes ever\nSometimes never"];
//NSDictionary *attributedDic = @{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:25]};
//[attributedString addAttributes:attributedDic range:NSMakeRange(0, attributedString.length)];
CATextLayer *textLayer = [CATextLayer layer];
textLayer.string = attributedString;
textLayer.bounds = CGRectMake(0, 0, 200, 150);
textLayer.position = CGPointMake(self.view.bounds.size.width/2, 540);
textLayer.alignmentMode = kCAAlignmentCenter;
textLayer.foregroundColor = [UIColor blackColor].CGColor;
textLayer.contentsScale = [UIScreen mainScreen].scale;
[self.view.layer addSublayer:textLayer];
attributedString1.png












网友评论