UI篇-CATextLayer和 富文本的交融

前言

CATextLayer适用于IOS或者MAC,比UIlablel 和 NSTextView 能做的事很多,可以这样说UIlablel是通过CATextLayer实现的,身为CALayer的三大子类之一,它的功能远比 UIlablel 强大的多的多,其最主要的特点是CATextLayer可以被NSMutableAttributedString直接附值。而NSMutableAttributedString有可以最自己内容作出颜色以及大小的调整,这样结合起来使用的话,就远比UILabel 灵活的多,效果也酷炫的多,也许CATextLayer就是为了NSMutableAttributedString而生的,(哈哈,开个玩笑)。下面就简要介绍下CATextLayer 的常规使用,不足之处,还望朋友们下面留言补充,不胜感谢。
苹果官网给出CATextLayer的API解释


初始化一个CATextLayer

CATextLayer *lary =[CATextLayer layer];   
lary.string = @"dasfasa";    
lary.bounds = CGRectMake(0, 0, 320, 20);      
lary.font = @"HiraKakuProN-W3";//字体的名字 不是 UIFont   
lary.fontSize = 12.f;//字体的大小      
lary.alignmentMode = kCAAlignmentCenter;//字体的对齐方式    
lary.position = CGPointMake(160, 410);     
lary.foregroundColor =[UIColor redColor].CGColor;//字体的颜色  
[self.view.layer addSublayer:lary];
/*
 @property CGFloat contentsScale; 使用CATextLayer设置文本,可能会产生模糊状态,因为该默认的分辨率不是retina,设置如下代码即可:
*/
  • CATextLayer与 CAGradientLayer(渐变图层)结合,[金闪闪动画字体]
字.gif
  • CATextLayer与CAShapeLayer(波浪)
波浪.gif

这里只提供思路 具体代码地址

富文本AttributedString

AttributedString可以分为NSAttributedString和NSMutableAttributedString两种。在使用中通过将AttributedString赋值给控件的 attributedText 属性来添加文字样式。有属性的控件有UILabel、UITextField和UITextView。

  • 使用方式一

    初始化一个NSMutableAttributedString,然后向里面添加文字样式,将其赋给控件的  
    *attributedText*属性。
    
    NSString *str = @"相看两不厌,唯有敬亭山";
    //创建NSMutableAttributedString
     NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:str];
    //设置字体和设置字体的范围
    [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30.0f]  range:NSMakeRange(0, 3)];
    //添加文字颜色
    [attrStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(17, 7)];
    
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(60, 100, 200, 0)];
    label.backgroundColor = [UIColor greenColor];
    //自动换行
    label.numberOfLines = 0;
    //设置label的富文本
    label.attributedText = attrStr;
     //label高度自适应
    [label sizeToFit];
    [self.view addSubview:label];
    
  • 使用方式二
    创建属性字典,并将各种属性初始化。赋值,
    并利用方法appendAttributedString: 添加入NSMutableAttributedString,将其赋给控件的
    attributedText
    属性。**

    //初始化NSMutableAttributedString
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]init];
    //设置字体格式和大小NSString *str0 = @"设置字体格式和大小";
    NSDictionary *dictAttr0 = @{NSFontAttributeName:[UIFont systemFontOfSize:14]};
    NSAttributedString *attr0 = [[NSAttributedString alloc]initWithString:str0 attributes:dictAttr0];      
    [attributedString appendAttributedString:attr0];
    
    //设置字体颜色NSString *str1 = @"\n设置字体颜色\n";
    NSDictionary *dictAttr1 = @{NSForegroundColorAttributeName:[UIColor purpleColor]};
    NSAttributedString *attr1 = [[NSAttributedString alloc]initWithString:str1 attributes:dictAttr1];       
    [attributedString appendAttributedString:attr1];
    
     UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(60, 100, 300, 0)];
    label.backgroundColor = [UIColor lightGrayColor];
    //自动换行
    label.numberOfLines = 0;
    //设置label的富文本
    label.attributedText = attributedString;
    //label高度自适应[label sizeToFit];
    [self.view addSubview:label];
    

文本属性Attributes

1.直接上干货,多个属性可以一同使用

//NSFontAttributeName 字号 UIFont 默认12 
//NSParagraphStyleAttributeName 段落样式 NSParagraphStyle 
//NSForegroundColorAttributeName 前景色 UIColor 
//NSBackgroundColorAttributeName 背景色 UIColor 
//NSObliquenessAttributeName 字体倾斜 NSNumber 
//NSExpansionAttributeName 字体加粗 NSNumber 比例 0就是不变 1增加一倍 
//NSKernAttributeName 字间距 CGFloat 
//NSUnderlineStyleAttributeName 下划线 1或0 
//NSUnderlineColorAttributeName 下划线颜色
 //NSStrikethroughStyleAttributeName 删除线 1或0
 //NSStrikethroughColorAttributeName 某种颜色 
//NSStrokeColorAttributeName same as ForegroundColor 
//NSStrokeWidthAttributeName CGFloat 
//NSLigatureAttributeName 连笔字 1或0 没看出效果 
//NSShadowAttributeName 阴影 NSShawdow
 //NSTextEffectAttributeName 设置文本特殊效果,取值为 NSString 对象,目前只有图版印刷效果可用: 
//NSAttachmentAttributeName NSTextAttachment 设置文本附件,常用插入图片 
//NSLinkAttributeName 链接 NSURL (preferred) or NSString
 //NSBaselineOffsetAttributeName 基准线偏移 NSNumber 
//NSWritingDirectionAttributeName 文字方向 @[@(1),@(2)] 分别代表不同的文字出现方向等等,我想你一定用不到它 - -
 //NSVerticalGlyphFormAttributeName 水平或者竖直文本 1竖直 0水平 在iOS没卵用,不支持竖版

2.设置段落样式:段落样式中允许你设置文字与文字之间的行间距、字符间距、以及对齐模式,但是注意的是,在设置段落样式的时候,必须保证控件的

numberofline属性必须为0

NSMutableAttributedString* str2 = [[NSMutableAttributedString alloc]initWithString:@"这是测试段落样式的文字,这是测试段落样式的文字,这是测试段落样式的文字,这是测试段落样式的文字,这是测试段落样式的文字,这是测试段落样式的文字。"];
NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc]init];
//对齐模式
//NSTextAlignmentCenter;//居中
//NSTextAlignmentLeft //左对齐
//NSTextAlignmentCenter //居中
//NSTextAlignmentRight //右对齐
//NSTextAlignmentJustified//最后一行自然对齐
//NSTextAlignmentNatural //默认对齐脚本
[paragraphStyle setAlignment:NSTextAlignmentLeft];
//换行裁剪模式
 //NSLineBreakByWordWrapping = 0,//以空格为边界,保留单词
//NSLineBreakByCharWrapping, //保留整个字符
//NSLineBreakByClipping, //简单剪裁,到边界为止
//NSLineBreakByTruncatingHead, //按照"……文字"显示
//NSLineBreakByTruncatingTail, //按照"文字……文字"显示
//NSLineBreakByTruncatingMiddle //按照"文字……"显示
[paragraphStyle setLineBreakMode:NSLineBreakByCharWrapping];
 //行间距
[paragraphStyle setLineSpacing:5.f];
 //字符间距
[paragraphStyle setParagraphSpacing:2.f];
[str2 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [str2 length])];

**最后,将上面设置**文字**样式,设置**段落**样式的两部分代码分别加入UILable  attributedText 来查看结果:**

设置段落格式示例

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = Scale_Y(7);// 字体的行间距
    paragraphStyle.paragraphSpacing = Scale_Y(3);
    attributes = @{
                                 NSFontAttributeName:[UIFont systemFontOfSize:SMALL_FONT],
                                 NSParagraphStyleAttributeName:paragraphStyle,
                                 NSForegroundColorAttributeName:[UIColor whiteColor]
                                 };
    _textV.attributedText = [[NSAttributedString alloc] initWithString:_textV.text attributes:attributes];
    _textV.textColor = [UIColor whiteColor];

值得注意的地方是 drawAtPoint和drawInRect的区别是后一个可以自动换行,不过代价是 不设置属性,都是默认的属性有时候是无法接受的。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容