如何使得label字体颜色里的字符有不同的颜色

&&下载仅需要2金币
文件大小:0.14MB&&&
贡献者:hahiho88&&&
贡献时间:日&&&
来源:Licence:Custom平台:iOS设备:iPhone&/&iPad作者:孙化育&&&&自定义label,实现在同一个label上显示不同颜色、不同字体以及不同大小的文字,并且可以在字底下画横线。使用很方便。&&&&小编注:感谢作者@孙化育 分享代码与Code4App。&&&&Code4App编译测试,适用环境:Xcode 4.5, iOS 4.0 以上。
相关标签:
同类热门源码
你可能喜欢
该用户的其它源码
所需金币:
文件大小:0.14MB
您当前剩余金币:09728人阅读
以下大家友情支持一下:
做了一个产品,需要人气支持一下,android和iphone上91市场搜索#super junior粉丝团#,或者直接到页面下载,大家帮忙捧捧场。
同一行文字可以显示不同的字体,加粗,斜体,颜色的文本,同时还能反馈点击事件。
继承自UILabel
1。来自开源代码TTTAttributedLabel
/mattt/TTTAttributedLabel
2。涉及到一个概念NSMutableAttributedString, 这个东西好像主要用在html和文本见转换用,具体用法见下面的代码
3。如何使用:
#import &TTTAttributedLabel.h&
#import &UIKit/UIKit.h&
#import &CoreText/CoreText.h&
self.summaryLabel = [[[TTTAttributedLabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)] autorelease];
self.summaryLabel.font = [UIFont systemFontOfSize:kSummaryTextFontSize];
self.summaryLabel.textColor = [UIColor blackColor];
self.summaryLabel.lineBreakMode = UILineBreakModeWordW
self.summaryLabel.numberOfLines = 0;
self.summaryLabel.linkAttributes = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCTUnderlineStyleAttributeName];
self.summaryLabel.highlightedTextColor = [UIColor redColor];
self.summaryLabel.shadowColor = [UIColor colorWithWhite:0.87 alpha:1.0];
self.summaryLabel.shadowOffset = CGSizeMake(0.0f, 1.0f);
self.summaryLabel.verticalAlignment = TTTAttributedLabelVerticalAlignmentT
NSMutableAttributedString * tttstring = [[NSMutableAttributedString alloc] initWithString:@&firstsecondthird&];
UIFont *italicSystemFont = [UIFont italicSystemFontOfSize:kSummaryTextFontSize];
CTFontRef italicFont = CTFontCreateWithName((CFStringRef)italicSystemFont.fontName, italicSystemFont.pointSize, NULL);
if(italicFont){
[tttstring addAttribute:(NSString *)kCTFontAttributeName value:(id)italicFont range:NSMakeRange(5,6)];
CFRelease(italicFont);
[tttstring addAttribute:(NSString*)kCTForegroundColorAttributeName value:(id)[[UIColor redColor] CGColor] range:NSMakeRange(0,5)];
[self.summaryLabel setText:tttstring];
4.推荐文章
如何让 iOS 和 Android 支持自定义字体
//custom-fonts-both-in-ios-and-android/
自定义字体的UILabel
//%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AD%97%E4%BD%93%E7%9A%84uilabel/
http://blog.csdn.net/microchenhong/article/details/6542994
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:707797次
积分:9503
积分:9503
排名:第809名
原创:199篇
转载:246篇
评论:102条
(19)(1)(4)(2)(1)(2)(1)(4)(1)(2)(1)(4)(2)(2)(5)(7)(9)(4)(1)(5)(3)(3)(4)(1)(11)(12)(18)(42)(15)(1)(5)(6)(1)(5)(10)(27)(23)(3)(12)(16)(20)(20)(15)(16)(21)(25)(18)(9)(8)label里的文字如何显示多种颜色?
[问题点数:20分,结帖人newSuperstarlaocai]
label里的文字如何显示多种颜色?
[问题点数:20分,结帖人newSuperstarlaocai]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2011年4月 .NET技术大版内专家分月排行榜第二
2011年3月 .NET技术大版内专家分月排行榜第三
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2013年10月 Oracle大版内专家分月排行榜第二2012年3月 Oracle大版内专家分月排行榜第二
2013年9月 Oracle大版内专家分月排行榜第三2013年6月 Oracle大版内专家分月排行榜第三2012年7月 Oracle大版内专家分月排行榜第三2012年4月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。cocos2d-x 中添加显示文字的三种方式 LabelTTF 、LabelBMFont 和 LabelAtlas - 冠军 - 博客园
随笔 - 267
评论 - 1760
在 cocos2d-x 中有三个类可以在层或精灵中添加文字:
LabelBMFont
LabelAtlas
LabelTTF 直接支持使用 TTF 字库,可以支持全部的中文,但是效率稍低。LabelBMFont 适合显示特定的文字,通过预先将文字生成图片,提高了效率,但是不能支持全部中文。如果使用的文字不多,组合多,但是文字的编码是连续的,比如数字,或者英文字符,那么 LabelAtlas 更加适合你。
先说 LabelTTF , TTF(TrueType Font) 是一种字库规范,是 Apple 公司和 Microsoft 公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。
在 Windows Phone 中使用的时候,我们需要把字库文件保存在 Resources\fonts 文件夹下面,保证 Cocos2d-x 能够找到字体。下面我们考虑在程序中使用字体 Consolas 显示一个字符串。
在系统文件夹&C:\Windows\Fonts 中找到 Consolas 字体,选中之后,进行复制。
复制到我们 Resources\fonts 文件夹中。
特别说明:
在 Andiord 和 iOS 中,代码中通过字体的名称,而不是字体文件的名称来使用字体。但是,在 Windows Phone 中,却不使用真实的字体名称,而是使用字体文件的名称来使用字体。
我们在前面复制过来的字体文件名称实际上是 consola.ttf,为了在后面使用这种字体,你需要将字体文件的名称改为 consolas.ttf 。或者字体名称使用 Consola 。
代码中可以如下使用字体来创建标签。
LabelTTF *label = LabelTTF::create("exp:+1234567", "Consolas", 40);
label-&setPosition(visibleSize.width / 2, visibleSize.height / 2);
addChild(label);
或者使用 TTFConfig ,好处是可以重复使用字体的配置信息,不用每次都指定字体名称和尺寸。
TTFConfig ttfConfig("fonts/Consolas.ttf", 24);
auto labelHello = Label::createWithTTF(ttfConfig, "Hello, TTFConfig");
labelHello-&setPosition(visibleSize.width / 2, visibleSize.height / 2);
labelHello-&setString("Reset String");
addChild(labelHello);
文字是如何显示在 UI 上的呢?实际上 Label 需要从字库中抽取字形,通过字形创建图片纹理,然后才能显示出来。如果字库比较大,比如说中文字库,我们没有使用字库中所有的文字,那么一个几 M 的字库文件就很浪费空间了,每次的重新生成纹理就更加浪费资源。我们可以考虑不使用字体文件,而直接准备好文字的图片直接显示在 UI 上。
LabelBMFont
LabelTTF 每次调用 setString (即改变文字)的时候,一个新的 OpenGL 纹理将会被创建.。这意味着setString 和创建一个新的标签一样慢。 所以,当你需要频繁的更新它们的时候,尽可能的不用去使用标签对象。 LabelAtlas 或者 LabelBMFont 可以帮助我们实现这种效果。
首先,我们使用一个工具来帮助我们从字库文件中抽取字形,生成我们需要的图片,这个工具称为&,可以直接下载到。
现在有两个版本,我们直接使用最新的 v1.14 beta 来处理。先安装一下。
下面启动起来
进行字体设定,我们使用微软雅黑来支持一下中文。
在弹出的对话框中选择微软雅黑,进行具体的设置。
然后,打开记事本,创建一个文本文件,写入你希望使用的文字,注意,在保存的使用要选择 Utf-8 格式。
然后,在 Bitmap font generator 的 Edit 菜单中,通过 Select chars form file 来选择你刚刚创建的文本文件,成功之后,你会在 Bitmap font generator 中看到你使用的文字已经被选中了。
现在,可以导出图片了。
看导出的对话框。
Padding,文字的内边框,或者理解为文字的周边留空要多大 做后期样式时这个属性很重要,需要预留空间来给描边、发光等特效使用 比如我预计我的样式要加一个2px的边框,然后加一个右下角2px的投影效果,所以我设定了padding:2px 4px 4px 2px
BitDepth,必须32位,否则没有透明层
Presets,字体初始化的预设的颜色通道设定,也就是说字体的初始颜色设定是什么样的,建议都用白色字,可以直接设定为White text with alpha,即白色字透明底。
Font descript,字体描述文件,可以使用text或者xml 也就是fnt文件格式
Textures,纹理图片格式,果断png。
最后,导出图片文件。
终于可以使用一下了。
首先,在资源中创建一个 xml 格式的 plist 文件,在其中定义我们希望显示的字符串。我们将这个文件直接保存在 Resources 的目录之下,名为 string.xml.
&?xml version="1.0" encoding="utf-8" ?&
&plist version="1.0"&
&key&name&/key&
&string&你好,Microsoft 雅黑&/string&
将我们刚刚生成的两个字体文件也复制到这个目录下。
CCDictionary *strings = CCDictionary::createWithContentsOfFile("string.xml");
const char *charchinese = ((CCString*)strings-&objectForKey("name"))-&getCString();
LabelBMFont *label = LabelBMFont::create(charchinese, "helloFont.fnt");
label-&setPosition(visibleSize.width / 2, visibleSize.height / 2);
addChild(label);
运行程序,就可以看到我们输出了,显示同样的文字,我们仅仅需要一张 3.43k 的图片文件就可以了。
如果无法使用,可以查看一下ccConfig.h中的CC_FONT_LABEL_SUPPORT是否enable了。
CCLabelBMFont CCLabelBMFont 相当于每次改变只改变了图片坐标,而CCLabelTTF要重新渲染.这个类使用之前,需要添加好字体文件,包括一个图片文件 (**.png) 和一个 字体坐标文件 (**.fnt)。 在 cocos2d-x的示例项目中有现成的,可以先拿过来练习一下,找的时候注意两个文件的 名称是相同的,只是扩展名不同。
这个没办法指定字体的字号,但可以用 scale 属性进行缩放来调整大小。就当它是sprite。
LabelAtlas&
如果你用cocos2d-x项目模板创建过项目,那么你已经看过它的效果了,就是左下角显示帧率的数字。 因为帧率一直在变,使用CCLabelTTF的话效率太低,因为只是数字所以也犯不上使用 CCLabelBMFont 加载那么大的文字图像,所以使用这个比较合适。
比如说,我们准备显示 0-9 十个数字,我们可以在一张图片中制作好这十个数字。每个数字都有相同的宽度和高度。将它保存在资源中。别忘了设置复制。
比较重要的是,这十个数字要按照 ASCII 顺序排列,我们要设置第一个字符的 ASCII 编码,这样,Cocos2d-x 就可以直接计算出不同字符对应的图形了。
CCLabelAtlas* diceCount=CCLabelAtlas::labelWithString("1:", "nums_font.png", 14, 21, '0');
第一个参数:显示的内容:1x,你也许会奇怪为什么是1x,因为使用的png图必须是连续的,因为程序内部是议连续的scall码识别的。9的后一位的&:&,所以先实现x就得用&:&代替。
第二个参数:图片的名字
第三个参数:每一个数字的宽
第四个参数:每一个数字的高
每五个数字:开始字符
LabelAtlas* diceCount = CCLabelAtlas::create("100:", "nums_font.png", 14, 21, '0');
diceCount-&setPosition(Point(visibleSize.width - 150, visibleSize.height / 2 - 50));
addChild(diceCount);10059人阅读
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想。后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。
1.&&&&&实例化方法和使用方法
实例化方法:
使用字符串初始化
- (id)initWithString:(NSString&*)
NSMutableAttributedString&*AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@&今天天气不错呀&];
- (id)initWithString:(NSString&*)str attributes:(NSDictionary&*)
字典中存放一些属性名和属性值,如:
NSDictionary&*attributeDict = [NSDictionarydictionaryWithObjectsAndKeys:
& & & & & & & & & & & & & & & & & & [UIFontsystemFontOfSize:15.0],NSFontAttributeName,
& & & & & & & & & & & & & & & & & & [UIColorredColor],NSForegroundColorAttributeName,
& & & & & & & & & & & & & & & & & &NSUnderlineStyleAttributeName,NSUnderlineStyleSingle,nil];
NSMutableAttributedString&*AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@&今天天气不错呀&&attributes:attributeDict];
- (id)initWithAttributedString:(NSAttributedString&*)
使用NSAttributedString初始化,跟NSMutableString,NSString类似
使用方法:
为某一范围内文字设置多个属性
- (void)setAttributes:(NSDictionary&*)attrs range:(NSRange)
为某一范围内文字添加某个属性
- (void)addAttribute:(NSString&*)name value:(id)value
range:(NSRange)
为某一范围内文字添加多个属性
- (void)addAttributes:(NSDictionary&*)attrs range:(NSRange)
移除某范围内的某个属性
- (void)removeAttribute:(NSString&*)name range:(NSRange)
2.&&&&&常见的属性及说明
NSFontAttributeName&
NSParagraphStyleAttributeName&
段落格式&
NSForegroundColorAttributeName&
NSBackgroundColorAttributeName&&
NSStrikethroughStyleAttributeName
删除线格式
NSUnderlineStyleAttributeName& & &
下划线格式
NSStrokeColorAttributeName&& & &&
删除线颜色
NSStrokeWidthAttributeName
删除线宽度
NSShadowAttributeName&
更多方法和属性说明详见苹果官方说明文档:
3.& &使用实例
& &UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)]; & testLabel.backgroundColor = [UIColor lightGrayColor]; & testLabel.textAlignment = NSTextAlignmentCenter; & NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@&今天天气不错呀&]; & [AttributedStr addAttribute:NSFontAttributeName & & & & & & & & & & & & value:[UIFont systemFontOfSize:16.0] & & & & & & & & & & & & range:NSMakeRange(2, 2)]; & [AttributedStr addAttribute:NSForegroundColorAttributeName & & & & & & & & & & & & value:[UIColor redColor] & & & & & & & & & & & & range:NSMakeRange(2, 2)]; & testLabel.attributedText = AttributedStr; & [self.view addSubview:testLabel];
运行效果:
另外,其他可以设置text&的控件(如UIButton,UITextField)也都有该属性,该文章不够详细,只是简单介绍,其他效果的实现参考API中更多的属性及使用方法。
转载自:http://snowyshell./blog/static//
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:276222次
积分:4204
积分:4204
排名:第3421名
原创:143篇
转载:41篇
评论:29条
reylen2014
阅读:1381
(9)(6)(9)(5)(5)(2)(2)(3)(6)(7)(2)(3)(4)(5)(3)(4)(1)(4)(13)(11)(7)(4)(4)(2)(8)(4)(4)(4)(13)(10)(7)(13)(1)

我要回帖

更多关于 ios label字体颜色 的文章

 

随机推荐