iOS开发笔记-一种任意字体、颜色混排UILabel的实现

最近开发新App,射妓狮给的图上出现一种不同大小字体混排的Label,就像下面这种:

想了想,最简单的方法是使用多个UILabel排列显示,但是这样不仅麻烦而且效果也不好,索性自定义UILabel来尽可能的满足使用灵活性。

实现方法

与正常自定义控件的方法类似,主要利用了CoreGraphics来动态绘制字体,但这里字体的参数都用NSArray存储,以尽最大可能不受具体内容约束,实现灵活性。

代码如下:

//
//  UnevenHeightLabel.h
//  demo
//
//  Created by ZhangChangwei on 15/3/31.
//  Copyright (c) 2015年 Changwei. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UnevenHeightLabel : UIView
@property (nonatomic) NSArray *strings;
@property (nonatomic) NSArray *fonts;
@property (nonatomic) NSArray *fontFrames;
@property (nonatomic) NSArray *fontColors;

-(instancetype) initWithUnevenHeightStrings:(NSArray *)strings stringFonts:(NSArray *)fonts stringRects:(NSArray *)rects stringColors:(NSArray *) colors;
@end
//
//  UnevenHeightLabel.m
//  demo
//
//  Created by ZhangChangwei on 15/3/31.
//  Copyright (c) 2015年 Changwei. All rights reserved.
//

#import "UnevenHeightLabel.h"
#import "UIColor+HexColor.h"

@implementation UnevenHeightLabel

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(ctx, 1.0f);
    if(_strings!=nil&& _strings.count>0){
        for (int i=0; i<_strings.count; i++) {
            [_strings[i] drawInRect:[(NSValue *)_fontFrames[i] CGRectValue] withAttributes:@{NSFontAttributeName:_fonts[i],
                                                                                             NSForegroundColorAttributeName:_fontColors[i]}];
        }
    }
}

-(instancetype)initWithUnevenHeightStrings:(NSArray *)strings stringFonts:(NSArray *)fonts stringRects:(NSArray *)rects stringColors:(NSArray *)colors{
    self=[super init];
    self.strings=strings;
    self.fonts=fonts;
    self.fontFrames=rects;
    self.fontColors=colors;
    //[self setNeedsDisplay];
    return self;
}

@end

  

Demo:

使用方法很简单,直接在需要使用的地方调用,如下:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
    UnevenHeightLabel *mylabel=[[UnevenHeightLabel alloc] initWithUnevenHeightStrings:@[@"A",@"a",@"B",@"b",@"C",@"c"]
                                                                          stringFonts:@[[UIFont systemFontOfSize:25],
                                                                                        [UIFont systemFontOfSize:20],
                                                                                        [UIFont systemFontOfSize:25],
                                                                                        [UIFont systemFontOfSize:20],
                                                                                        [UIFont systemFontOfSize:25],
                                                                                        [UIFont systemFontOfSize:20]]
                                                                          stringRects:@[
                                                                                        [NSValue valueWithCGRect:CGRectMake(0, 0, 40, 30)],
                                                                                        [NSValue valueWithCGRect:CGRectMake(20, 5, 20, 20)],
                                                                                        [NSValue valueWithCGRect:CGRectMake(35, 0, 25, 30)],
                                                                                        [NSValue valueWithCGRect:CGRectMake(55, 5, 20, 20)],
                                                                                        [NSValue valueWithCGRect:CGRectMake(70, 0, 25, 30)],
                                                                                        [NSValue valueWithCGRect:CGRectMake(90, 5, 20, 20)]]
                                                                         stringColors:@[
                                                                                        [UIColor redColor],
                                                                                        [UIColor orangeColor],
                                                                                        [UIColor greenColor],
                                                                                        [UIColor blueColor],
                                                                                        [UIColor cyanColor],
                                                                                        [UIColor purpleColor]]];
    [mylabel setFrame:CGRectMake(SCREEN_WIDTH/2-55, SCREEN_HEIGHT/2-30, 110, 50)];
    [mylabel setBackgroundColor:[UIColor clearColor]];
    [self.view addSubview:mylabel];
    UnevenHeightLabel *mylabel1=[[UnevenHeightLabel alloc] initWithUnevenHeightStrings:@[@"11.",@"0",@"%"]
                                                                           stringFonts:@[[UIFont systemFontOfSize:25],
                                                                                         [UIFont systemFontOfSize:20],
                                                                                         [UIFont systemFontOfSize:25]]
                                                                           stringRects:@[
                                                                                         [NSValue valueWithCGRect:CGRectMake(0, 0, 40, 30)],
                                                                                         [NSValue valueWithCGRect:CGRectMake(35, 5, 20, 20)],
                                                                                         [NSValue valueWithCGRect:CGRectMake(50, 0, 25, 30)]]
                                                                          stringColors:@[[UIColor getColorFromHex:@"#ff8946"],
                                                                                         [UIColor getColorFromHex:@"#ff8946"],[UIColor getColorFromHex:@"#ff8946"]]];
    [mylabel1 setFrame:CGRectMake(SCREEN_WIDTH/2-50, SCREEN_HEIGHT/2+30, 100, 50)];
    [mylabel1 setBackgroundColor:[UIColor clearColor]];
    [self.view addSubview:mylabel1];
}

  

效果如下:

时间: 2024-10-27 11:34:04

iOS开发笔记-一种任意字体、颜色混排UILabel的实现的相关文章

iOS开发日记21-7.0之后的图文混排

今天博主有一个图文混排的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. iOS7.0以前,图文混排主要有两种方法:1.WebView+js  2.coreText iOS7.0之后,苹果提供了新的封装,让图文混排更加的简便,也就是第三种方法:3.TextKit 今天就和大家详细的分享一下这三种图文混排的方法 1.webview+js的方法其实很简单,下面贴出代码,各位自行研究 去除webView滚动时,上下的白边. - (void)clearWebViewBackground:(UI

iOS开发 - 第05篇 - 项目 - 12 - 图文混排

1.首页微博文字处理 对于之前微博项目中首页:微博文字中的用户名.话题.链接等文字需要高亮显示,表情字符串需要显示对应表情. 思路: 1>之前微博中的文字使用NSString,要达到不同文字的高亮显示,需要使用NSAttributedString 2>微博模型中增加一个属性,代表属性字符串 /** string     微博信息内容*/ @property(nonatomic, copy) NSString *text; /** string     微博信息内容 -- 带有属性的(特殊文字会

iOS开发笔记--使用blend改变图片颜色

最近对Core Animation和Core Graphics的内容东西比较感兴趣,自己之前也在这块相对薄弱,趁此机会也想补习一下这块的内容,所以之后几篇可能都会是对CA和CG学习的记录的文章. 在应用里一个很常见的需求是主题变换:同样的图标,同样的素材,但是需要按照用户喜爱变为不同的颜色.在iOS5和6的SDK里部分标准控件引入了tintColor,来满足个性化界面的需求,但是Apple在这方面还远远做的不够.一是现在用默认控件根本难以做出界面优秀的应用,二是tintColor所覆盖的并不够全

李洪强iOS开发之-修改状态栏的字体的颜色

李洪强iOS开发之-修改状态栏的字体的颜色 修改的效果: -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [_magicController.view setFrame:CGRectMake(0, 0, CFScreenW, self.view.height-120)]; if ([UIApplication sharedApplication].statusBarStyle != UIStatusBar

iOS开发笔记-两种单例模式的写法

iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" static ServiceManager *defaultManager; @implementation ServiceManager +(ServiceManager *)defaultManager{ if(!defaultManager) defaultManager=[[self allocWith

IOS开发笔记-百度地图(第三方库)

最近做了百度地图,在导入SDK后遇到了一些问题 编译错误: linker command failed with exit code 1 (use -v to see invocation) 想了很多办法,查了很多资料,最后终于解决. 可能原因: 1. 有重复的.m文件,或者未导入 解决办法:有重复的删除即可 在工作左边导航栏Target-->Build Phases-->compile Sources中,第三库库的所有.m文件都添加到里面 2.Valid Architectures 的值 在

如何在iOS开发中添加新的字体

iOS 开发默认字体是 Heiti SC ,即我们常用的「黑体-简」 用过一段时间后,就会发现字体过于单调了 ,那么怎么在iOS开发中添加新的字体呢 ,这里教你两种方法. 1.使用系统自带的字体 搜索fonts,不难发现,系统中是有不少字体的,而这些字体也是都是可以使用的. 这些字体只用时可以通过代码来设置,也可以直接来设置,方法很简单: 将text的属性设置为Attributed,再选择自己想要的系统字体就OK啦 2.使用自己从网上下载的字体 首先从网上下载自己喜欢的字体,将下载好的字体拖入当

iOS开发UITableViewCell的选中时的颜色设置

1.系统默认的颜色设置 //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 cell.selectionStyle = UITableViewCellSelectionStyleBlue; //灰色 cell.selectionStyle = UITableViewCellSelectionStyleGray; 2.自定义颜色和背景设置 改变UITableViewCell选中时背景色: UIColor *color

ios开发笔记----exc_bad_access(code=1, address=0x789870)野指针错误,假死debug状态

错误原因: exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后.再去通过该对象去调用其它的方法就会出现野指针错误. 例如: Person *jerry = [[Person alloc]init];  //  retainCount引用计数为1 [jerry eat];  //  调用吃的方法 [jerry release];  //  释放jerry这个对象到 retain