`

label中显示不同颜色的字以及不同字体,字体高亮,DIY label

    博客分类:
  • ios
 
阅读更多

最近老大给个小任务 叫小生实现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

分享到:
评论

相关推荐

    label字体颜色

    在iOS开发中,"label字体颜色"是一个常见的需求,特别是在创建用户界面时,为了增加视觉吸引力和信息传达的清晰度,我们经常需要对UILabel的文字颜色进行定制。在本例中,描述提到了“渐变字体颜色”和“多彩的渐变...

    Delphi Xe2应用皮肤后Label字体颜色无法改变问题

    总之,面对Delphi XE2中Label字体颜色无法改变的问题,关键在于理解和利用皮肤库提供的机制,通过设置"DisableTheme"属性来控制是否应用皮肤,以此来恢复标准的属性设置功能。通过这种方式,我们可以同时享受皮肤...

    ios-一个label上的字体显示不同的颜色.zip

    标题"ios-一个label上的字体显示不同的颜色.zip"暗示了这个压缩包可能包含了一个iOS应用项目,该项目演示了如何在一个UILabel上实现多色字体显示的功能。描述中的"博博~小白"可能是指项目作者或者一个角色,也可能是...

    C# WinForm Label 控件拓展—变色字体、超链接

    在C# WinForm开发中,Label控件是用于显示静态文本的常见组件,但默认情况下,它不支持复杂的格式化,比如变色字体或超链接功能。然而,开发者经常需要在用户界面中添加这些功能,以提升用户体验和交互性。在标题"...

    swift-UILabel的text设置不同颜色字体

    在某些场景下,我们可能需要为同一段文本中的不同部分设置不同的颜色和字体,以增强视觉效果或突出关键信息。`UILabel`本身不直接支持这种特性,但通过一些技巧和自定义方法,我们可以实现这一功能。下面我们将详细...

    UILabel显示不同字体和颜色的字

    标题“UILabel显示不同字体和颜色的字”以及描述所提及的,正是这种高级用法的一个例子。 在标准的`UILabel`使用中,我们通常设置全局的字体和颜色,如`label.font = UIFont(name: "fontName", size: fontSize)`和`...

    iOS中Label实现显示不同颜色与字体的方法

    接下来,我们将详细探讨如何在iOS中使用Label显示不同颜色和字体。 首先,我们要了解NSAttributedString和NSMutableAttributedString。NSAttributedString是不可变的,一旦创建就无法修改,而...

    UILabel显示不同颜色字体

    这篇博客"UILabel显示不同颜色字体"深入探讨了如何使UILabel内的文字具有不同的颜色,增加了UI的多样性和互动性。通过理解和运用这些技巧,开发者可以为用户创建更具吸引力和信息丰富的应用界面。 首先,我们了解...

    Label的源码 支持各种字体 以及各种排列方式 以及变幻字体颜色和字体透明度 文字的栅格化等

    WinUI的Label控件文字显示主要依靠控件皮肤的文字层 她支持以下特性: 1 此文字层支持透明度设置 2 支持文字的颜色任意设置 3 支持Freetype书写 4 同事也支持多国语言的切换功能 5 对齐方式的任意改变 6 文字的...

    VB.Net 中Label透明字体显示

    在VB.Net编程环境中,开发人员有时需要实现一些高级的界面效果,其中之一就是在Picture控件上显示具有透明背景的Label控件。这样的需求通常出现在创建自定义控件或设计美观的用户界面时。以下是对这个主题的详细解释...

    C#135使Label控件显示出多行文字 源代码

    在C#编程中,Label控件通常用于显示单行文本,但有时我们可能需要在Label中展示多行文本,例如在展示长段落或者多条信息时。标题"\"C#135使Label控件显示出多行文字 源代码\"\"表明我们将探讨如何在C#环境下修改...

    c# 数码管字体 各种下载字体显示

    这样,`myLabel`将以数码管字体显示数字"12345"。 4. **字符映射**:数码管字体可能不包含所有标准ASCII字符,因此在显示文本时,需要注意检查字体支持的字符集。有些数码管字体仅支持0-9和一些基本符号,所以在...

    WPF Label文字竖排 字间距控制

    在这个话题中,我们将深入探讨如何实现`Label`控件的文字竖排以及如何控制字间距。 首先,我们要知道在WPF中,`Label`控件默认是水平显示文本的。若要实现文字竖排,我们需要利用`FlowDirection`属性。`...

    Delphi 指定字符变色显示的Label控件

    "Delphi 指定字符变色显示的Label控件"是一个专为实现特定需求设计的组件,它扩展了标准的 TLabel 控件,使得开发人员能够轻松地使Label中的特定字符或字符串以不同的颜色显示。这个控件特别适用于那些需要强调或...

    wpf通过代码动态生成Label并通过popupcoloredit修改颜色.rar

    本示例中的“wpf通过代码动态生成Label并通过popupcoloredit修改颜色.rar”文件,展示了如何利用C#代码在运行时创建Label控件,并且与PopupColorEdit组件配合,让用户能够自定义Label的文字颜色。 首先,让我们详细...

    C#中label内容显示不全、不完整的解决方法

    c# label的内容显示不全,需要设置如下属性即可: 1、将Lable的font属性的字体改成宋体... 您可能感兴趣的文章:效控制C#中label输出文字的长度,自动换行C#利用Label标签控件模拟窗体标题的移动及窗体颜色不断变换效果

    字体镶边的Label控件

    1. **边框样式**:在实现字体镶边时,可以通过设置控件的边框宽度、边框颜色以及边框样式(如实线、虚线等)来实现。这通常需要修改控件的CSS样式(对于Web开发)或者使用特定的API(对于原生应用开发)。例如,在...

    在C#中, Winform的Picture控件上显示透明的Lable字体

    在C#中,我们可以创建一个自定义的Label控件,重写OnPaint方法,利用Graphics对象的SmoothingMode和CompositingMode属性,以及Color.FromArgb方法设置Alpha通道,来实现透明效果。 以下是一个简单的实现步骤: 1. ...

    asp换颜色代码 字体换色

    在探讨ASP.NET中字体换色代码的实现方法之前,我们首先需要理解ASP.NET的基本概念以及如何在网页中动态改变字体颜色。ASP.NET是Microsoft推出的一种用于构建动态网页和Web应用程序的技术框架,它允许开发者使用C#或...

Global site tag (gtag.js) - Google Analytics