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

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

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

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

    实现方法

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

    代码如下:

    //

    // UnevenHeightLabel.h

    // demo

    //

    // Created by ZhangChangwei on 15/3/31.

    // Copyright (c) 2015年 Changwei. All rights reserved.

    //

    #import

    @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];

    }

最新文章