UILabel上展示不同颜色的文字(NSAttributedString)
#import<CoreText/CoreText.h>
新建一个类,继承UILabel,以下为文件内容:
MyLabel.h
//MyLabel.h #import <Foundation/Foundation.h> #import <CoreText/CoreText.h>@interface MyLabel : UILabel@end
MyLabel.m
//MyLabel.m #import "MyLabel.h"@implementation MyLabel//NSAttributedString继承于NSObject,并且不支持任何draw的方法,那我们就只能自己draw了。 -(void)drawRect:(CGRect)rect{[super drawRect:rect];NSAttributedString *attriString = [self getAttributedString];//在代码中我们调整了CTM(current transformation matrix),这是因为Quartz 2D的坐标系统不同CGContextRef ctx = UIGraphicsGetCurrentContext();CGContextConcatCTM(ctx, CGAffineTransformScale(CGAffineTransformMakeTranslation(0, rect.size.height), 1.f, -1.f));//CTFramesetter是CTFrame的创建工厂,NSAttributedString需要通过CTFrame绘制到界面上,得到CTFramesetter后,创建path(绘制路径),然后得到CTFrame,最后通过CTFrameDraw方法绘制到界面上。CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attriString);CGMutablePathRef path = CGPathCreateMutable();CGPathAddRect(path, NULL, rect);CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);CFRelease(path);CFRelease(framesetter);CTFrameDraw(frame, ctx);CFRelease(frame);/* //------------------------------------------------------------------------ //----------------取消注释,同样可以实现UILabel上展示不同样式的文字-------------- //------------------------------------------------------------------------ CATextLayer *textLayer = [CATextLayer layer]; textLayer.string = [self getAttributedString]; textLayer.frame = CGRectMake(0, 50, 200, 200);//可调整位置 textLayer.backgroundColor = [UIColor purpleColor].CGColor; [self.layer addSublayer:textLayer]; */ }-(NSMutableAttributedString *)getAttributedString{//创建一个NSMutableAttributedStringNSMutableAttributedString *attriString = [[[NSMutableAttributedString alloc] initWithString:@"Come on,baby!Come on,baby!Come on,baby!"]autorelease];//把this的字体颜色变为红色[attriString addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor redColor].CGColor range:NSMakeRange(0, 4)];//把is变为黄色[attriString addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor yellowColor].CGColor range:NSMakeRange(5, 16)];//改变this的字体,value必须是一个CTFontRef[attriString addAttribute:(NSString *)kCTFontAttributeName value:(id)CTFontCreateWithName((CFStringRef)[UIFont boldSystemFontOfSize:14].fontName,14,NULL) range:NSMakeRange(0, 4)];//给this加上下划线,value可以在指定的枚举中选择[attriString addAttribute:(NSString *)kCTUnderlineStyleAttributeName value:(id)[NSNumber numberWithInt:kCTUnderlineStyleDouble] range:NSMakeRange(0, 4)];/* 换行的实现 如果想要计算NSAttributedString所要的size,就需要用到这个API: CTFramesetterSuggestFrameSizeWithConstraints,用NSString的sizeWithFont算多行时会算不准的,因为在CoreText里,行间距也是你来控制的。 设置行间距和换行模式都是设置一个属性:kCTParagraphStyleAttributeName,这个属性里面又分为很多子 属性,其中就包括 kCTLineBreakByCharWrapping kCTParagraphStyleSpecifierLineSpacingAdjustment 设置如下:*//* //-------------取消注释,实现换行------------- CTParagraphStyleSetting lineBreakMode; CTLineBreakMode lineBreak = kCTLineBreakByCharWrapping; //换行模式 lineBreakMode.spec = kCTParagraphStyleSpecifierLineBreakMode; lineBreakMode.value = &lineBreak; lineBreakMode.valueSize = sizeof(CTLineBreakMode); //行间距 CTParagraphStyleSetting LineSpacing; CGFloat spacing = 4.0; //指定间距 LineSpacing.spec = kCTParagraphStyleSpecifierLineSpacingAdjustment; LineSpacing.value = &spacing; LineSpacing.valueSize = sizeof(CGFloat); CTParagraphStyleSetting settings[] = {lineBreakMode,LineSpacing}; CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, 2); //第二个参数为settings的长度 [attriString addAttribute:(NSString *)kCTParagraphStyleAttributeName value:(id)paragraphStyle range:NSMakeRange(0, attriString.length)]; */return attriString; }@end
测试代码
先要 #import "MyView.h",在适当位置创建MyLabel的对象,并添加到View中
MyLabel *myLabel = [[MyLabel alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:myLabel];
[myLabel release];
效果图如下:
UILabel上展示不同颜色的文字(NSAttributedString)相关推荐
- 显示文字_在 iPhone 上调整显示与文字大小,让眼睛更舒服
刚开始写这个系列文章的时候,不少朋友都建议我,如果要给中老年人看,字号一定要大大大.其实比较最初的文章,我们的确调整过字号的大小,不过终究还是定在了目前的正文 17 号字上. 从某种角度而言,我们也希 ...
- php上传多张图片为什么只显示一张,javascript,_js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次???,javascript - phpStudy...
js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? js多张图片上传 也拿到多张图片的路径 在页面上展示只显示一张?只执行了一次??? self.$els.upload ...
- iphone原彩显示对眼睛好吗_在 iPhone 上调整显示与文字大小,让眼睛更舒服
刚开始写这个专栏的时候,不少朋友都建议我,如果要给中老年人看,字号一定要大大大.其实比较最初的文章,我们的确调整过字号的大小,不过终究还是定在了目前的正文 17 号字上. 从某种角度而言,我们也希望文 ...
- 计算机在食品上的应用论文,文字设计在食品包装设计中的运用论文
文字设计在食品包装设计中的运用论文 一.食品包装设计中的文字设计功能及类型 (一)食品包装设计中文字设计的主要功能 食品包装设计中的文字一般主要包括以下两种功能:①可读性.可读性是文字的基本功能,是一 ...
- 移动端之在不同尺寸大小的手机上展示同一效果解决方案(修正二) by FungLeo
移动端之在不同尺寸大小的手机上展示同一效果解决方案 by FungLeo 前言,反思 在之前的项目当中,我在CSS中设置html{font-size: 62.5%;},也就是设置为10px,然后全站根 ...
- vue3.0 + typescript openlayers实现地图标点、移动、画线、显示范围、测量长度、测量面积、画三角形、画正方形、画圆、线选、画笔、清除测量、清除、地图上展示弹窗等功能
vue3.0 + typescript openlayers实现地图标点.移动.画线.显示范围.测量长度.测量面积.画三角形.画正方形.画圆.线选.画笔.清除测量.清除地图所有等功能 由于最近项目中用 ...
- Android 在同一个TextView中展示不同颜色、不同字体大小
同一个TextView中展示不同颜色 xml代码片段 <androidx.appcompat.widget.AppCompatTextViewandroid:id="@+id/tang ...
- 帆船结构3D线上展示教学的亮点有哪些?
由广州华锐互动开发的帆船结构3D线上展示教学系统,是一种创新的教学方式,基于虚拟现实技术,通过3D模型.交互式模拟等技术手段,可以让学生在虚拟环境中进行帆船组装和调试训练,以达到实践教学的目的. 不同 ...
- php图片写入带问号_php实现图片上传时添加文字和图片水印技巧
本文实现的功能特别适用于一些商城和图片站中,分享了图片在上传时添加文字和图片水印的技巧,供大家参考,具体内容如下 1. water.class.php header('Content-Type:tex ...
最新文章
- linux文字模式怎么传文件夹,虚拟机VMWare文本模式Linux 与 Windows 文件互传
- CSU 1779: 错误的算法【矩阵/模拟】
- 克制懒惰之飞鸽传书版
- 微软开始测试自己的Google Base
- softmax实现多分类算法推导及代码实现
- 车架号查车辆型号_【菜鸟二手车大讲堂】第十一讲 经常提到的汽车车架号是什么?...
- 【程序员面试宝典】第五章 程序设计基本概念
- Macro版Property Generator辅助工具
- 常见的一些反爬虫策略破解方式-Java网络爬虫系统性学习与实战系列(11)
- 手工修复Win 7下彩影ARP防火墙驱动程序(适用于32/64位系统)
- 2017年NBA球员数据分析
- 【05】制作第一个zblog模板第四期,完成首页logo、搜索、文章列表,友情链接等大部分首页自定义模块
- 等待页面所有图片加载完毕
- cms三次标记浮动垃圾是如何产生的
- java 各种编码间转换
- linux内核版本指什么意思,Linux的内核版本是怎么回事
- 使用FFMPEG库封装264视频和acc音频数据到MP4文件中
- Java中如何实现数组反转,将数组元素倒过来排列?【含详细解析】
- python足球大数据分析_Python 抓取欧洲足球联赛数据进行大数据分析
- XMLHttpRequest状态
热门文章
- html实现旅游网站代码_[资源推荐] 必须收藏的两个查找论文和代码实现的网站!...
- mysql远程访问显示警告信息_mysql远程访问的时候遇到了各种问题
- 三十八、练习、Python判断一个信用卡号是否合理
- 6.29 Vue 第二天 学习笔记
- 享学金三银四一线大厂面试专题学习笔记
- 直播预告 | TCCI追问研讨会第二期:双向脑机接口如何实现?
- 直播 | KDD 2021论文解读:基于协同对比学习的自监督异质图神经网络
- 正经炼丹师如何完美安排国庆长假?| 假期专属论文清单
- 立足前沿 直击热点 搭建平台,2018中国人工智能大会在深圳拉开帷幕
- HDU1584 蜘蛛牌 DFS回溯