最近老大给个小任务 叫小生实现label中显示各种不同颜色的字,搜遍坛子,楞是没有。在朋友帮助下搞出来了,并且自己研究了一下,现在贴出来分享。
首先继承一个label,要想在一个label中实现各种不同颜色的字,就是重绘。不多说,上代码
//设置颜色属性和字体属性 - (NSAttributedString *)illuminatedString:(NSString *)text font:(UIFont *)AtFont{ int len = [text length]; //创建一个可变的属性字符串 NSMutableAttributedString *mutaString = [[[NSMutableAttributedString alloc] initWithString:text] autorelease]; //改变字符串 从1位 长度为1 这一段的前景色,即字的颜色。 /* [mutaString addAttribute:(NSString *)(kCTForegroundColorAttributeName) value:(id)[UIColor darkGrayColor].CGColor range:NSMakeRange(1, 1)]; */ [mutaString addAttribute:(NSString *)(kCTForegroundColorAttributeName) value:(id)self.stringColor.CGColor range:NSMakeRange(0, len)]; if (self.keywordColor != nil) { for (NSValue *value in list) { // NSValue *value = [list objectAtIndex:i]; NSRange keyRange = [value rangeValue]; [mutaString addAttribute:(NSString *)(kCTForegroundColorAttributeName) value:(id)self.keywordColor.CGColor range:keyRange]; } } //设置部分字段的字体大小与其他的不同 /* CTFontRef ctFont = CTFontCreateWithName((CFStringRef)AtFont.fontName, AtFont.pointSize, NULL); [mutaString addAttribute:(NSString *)(kCTFontAttributeName) value:(id)ctFont range:NSMakeRange(0, 1)];*/ //设置是否使用连字属性,这里设置为0,表示不使用连字属性。标准的英文连字有FI,FL.默认值为1,既是使用标准连字。也就是当搜索到f时候,会把fl当成一个文字。 int nNumType = 0; // float fNum = 3.0; CFNumberRef cfNum = CFNumberCreate(NULL, kCFNumberIntType, &nNumType); // CFNumberRef cfNum2 = CFNumberCreate(NULL, kCFNumberFloatType, &fNum); [mutaString addAttribute:(NSString *)kCTLigatureAttributeName value:(id)cfNum range:NSMakeRange(0, len)]; //空心字 // [mutaString addAttribute:(NSString *)kCTStrokeWidthAttributeName value:(id)cfNum2 range:NSMakeRange(0, len)]; CTFontRef ctFont2 = CTFontCreateWithName((CFStringRef)AtFont.fontName, AtFont.pointSize, NULL); [mutaString addAttribute:(NSString *)(kCTFontAttributeName) value:(id)ctFont2 range:NSMakeRange(0, len)]; // CFRelease(ctFont); CFRelease(ctFont2); return [[mutaString copy] autorelease]; } //重绘Text - (void)drawRect:(CGRect)rect { //获取当前label的上下文以便于之后的绘画,这个是一个离屏。 CGContextRef context = UIGraphicsGetCurrentContext(); //压栈,压入图形状态栈中.每个图形上下文维护一个图形状态栈,并不是所有的当前绘画环境的图形状态的元素都被保存。图形状态中不考虑当前路径,所以不保存 //保存现在得上下文图形状态。不管后续对context上绘制什么都不会影响真正得屏幕。 CGContextSaveGState(context); //x,y轴方向移动 CGContextTranslateCTM(context, 0.0, 0.0);/*self.bounds.size.height*/ //缩放x,y轴方向缩放,-1.0为反向1.0倍,坐标系转换,沿x轴翻转180度 // CGContextScaleCTM(context, 1, 100); NSArray *fontArray = [UIFont familyNames]; NSString *fontName; if ([fontArray count]) { fontName = [fontArray objectAtIndex:0]; } //创建一个文本行对象,此对象包含一个字符 CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef) [self illuminatedString:self.text font:self.font]); //[UIFont fontWithName:fontName size:60] //设置文字绘画的起点坐标。 CGContextSetTextPosition(context, 0.0, 0.0); /*ceill(self.bounds.size.height/4)*/ //在离屏上绘制line CTLineDraw(line, context); //将离屏上得内容覆盖到屏幕。此处得做法很像windows绘制中的双缓冲。 CGContextRestoreGState(context); CFRelease(line); //CGContextRef myContext = UIGraphicsGetCurrentContext(); //CGContextSaveGState(myContext); //[self MyColoredPatternPainting:myContext rect:self.bounds]; //CGContextRestoreGState(myContext); }
这里是label中实现多种颜色字体等的最主要的部分,注释已经写的比较清楚了。呵呵···
转载:http://www.cocoachina.com/bbs/read.php?tid=69385
相关推荐
在iOS开发中,"label字体颜色"是一个常见的需求,特别是在创建用户界面时,为了增加视觉吸引力和信息传达的清晰度,我们经常需要对UILabel的文字颜色进行定制。在本例中,描述提到了“渐变字体颜色”和“多彩的渐变...
总之,面对Delphi XE2中Label字体颜色无法改变的问题,关键在于理解和利用皮肤库提供的机制,通过设置"DisableTheme"属性来控制是否应用皮肤,以此来恢复标准的属性设置功能。通过这种方式,我们可以同时享受皮肤...
标题"ios-一个label上的字体显示不同的颜色.zip"暗示了这个压缩包可能包含了一个iOS应用项目,该项目演示了如何在一个UILabel上实现多色字体显示的功能。描述中的"博博~小白"可能是指项目作者或者一个角色,也可能是...
在C# WinForm开发中,Label控件是用于显示静态文本的常见组件,但默认情况下,它不支持复杂的格式化,比如变色字体或超链接功能。然而,开发者经常需要在用户界面中添加这些功能,以提升用户体验和交互性。在标题"...
在某些场景下,我们可能需要为同一段文本中的不同部分设置不同的颜色和字体,以增强视觉效果或突出关键信息。`UILabel`本身不直接支持这种特性,但通过一些技巧和自定义方法,我们可以实现这一功能。下面我们将详细...
标题“UILabel显示不同字体和颜色的字”以及描述所提及的,正是这种高级用法的一个例子。 在标准的`UILabel`使用中,我们通常设置全局的字体和颜色,如`label.font = UIFont(name: "fontName", size: fontSize)`和`...
接下来,我们将详细探讨如何在iOS中使用Label显示不同颜色和字体。 首先,我们要了解NSAttributedString和NSMutableAttributedString。NSAttributedString是不可变的,一旦创建就无法修改,而...
这篇博客"UILabel显示不同颜色字体"深入探讨了如何使UILabel内的文字具有不同的颜色,增加了UI的多样性和互动性。通过理解和运用这些技巧,开发者可以为用户创建更具吸引力和信息丰富的应用界面。 首先,我们了解...
WinUI的Label控件文字显示主要依靠控件皮肤的文字层 她支持以下特性: 1 此文字层支持透明度设置 2 支持文字的颜色任意设置 3 支持Freetype书写 4 同事也支持多国语言的切换功能 5 对齐方式的任意改变 6 文字的...
在VB.Net编程环境中,开发人员有时需要实现一些高级的界面效果,其中之一就是在Picture控件上显示具有透明背景的Label控件。这样的需求通常出现在创建自定义控件或设计美观的用户界面时。以下是对这个主题的详细解释...
在C#编程中,Label控件通常用于显示单行文本,但有时我们可能需要在Label中展示多行文本,例如在展示长段落或者多条信息时。标题"\"C#135使Label控件显示出多行文字 源代码\"\"表明我们将探讨如何在C#环境下修改...
这样,`myLabel`将以数码管字体显示数字"12345"。 4. **字符映射**:数码管字体可能不包含所有标准ASCII字符,因此在显示文本时,需要注意检查字体支持的字符集。有些数码管字体仅支持0-9和一些基本符号,所以在...
在这个话题中,我们将深入探讨如何实现`Label`控件的文字竖排以及如何控制字间距。 首先,我们要知道在WPF中,`Label`控件默认是水平显示文本的。若要实现文字竖排,我们需要利用`FlowDirection`属性。`...
"Delphi 指定字符变色显示的Label控件"是一个专为实现特定需求设计的组件,它扩展了标准的 TLabel 控件,使得开发人员能够轻松地使Label中的特定字符或字符串以不同的颜色显示。这个控件特别适用于那些需要强调或...
本示例中的“wpf通过代码动态生成Label并通过popupcoloredit修改颜色.rar”文件,展示了如何利用C#代码在运行时创建Label控件,并且与PopupColorEdit组件配合,让用户能够自定义Label的文字颜色。 首先,让我们详细...
c# label的内容显示不全,需要设置如下属性即可: 1、将Lable的font属性的字体改成宋体... 您可能感兴趣的文章:效控制C#中label输出文字的长度,自动换行C#利用Label标签控件模拟窗体标题的移动及窗体颜色不断变换效果
1. **边框样式**:在实现字体镶边时,可以通过设置控件的边框宽度、边框颜色以及边框样式(如实线、虚线等)来实现。这通常需要修改控件的CSS样式(对于Web开发)或者使用特定的API(对于原生应用开发)。例如,在...
在C#中,我们可以创建一个自定义的Label控件,重写OnPaint方法,利用Graphics对象的SmoothingMode和CompositingMode属性,以及Color.FromArgb方法设置Alpha通道,来实现透明效果。 以下是一个简单的实现步骤: 1. ...
在探讨ASP.NET中字体换色代码的实现方法之前,我们首先需要理解ASP.NET的基本概念以及如何在网页中动态改变字体颜色。ASP.NET是Microsoft推出的一种用于构建动态网页和Web应用程序的技术框架,它允许开发者使用C#或...