码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-03-31 19:29:38      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

最近开发新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];
}

 

  

效果如下:

 

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/mantgh/p/4381588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!