zoukankan      html  css  js  c++  java
  • iOS开发笔记-一种任意字体、颜色混排UILabel的实现

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

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

    实现方法

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

    代码如下:

    #import <UIKit/UIKit.h>
    
    @interface UnevenHeightLabel : UIView
    @property (nonatomic) NSArray *strings;
    @property (nonatomic) NSArray *fonts;
    @property (nonatomic) NSArray *originY;
    @property (nonatomic) NSArray *fontColors;
    
    -(instancetype) initWithUnevenHeightStrings:(NSArray *)strings stringFonts:(NSArray *)fonts originY:(NSArray *)originY  stringColors:(NSArray *) colors;
    @end
    #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);
        CGRect startRect;
        CGSize requiredSize;
        float sumWidth=0;
        if(_strings!=nil&& _strings.count>0){
            for (int i=0; i<_strings.count; i++) {
                CGSize maxSize=rect.size;
                requiredSize=[_strings[i] boundingRectWithSize:maxSize options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:_fonts[i]} context:nil].size;
                if(i==0){
                    startRect=CGRectMake(0, 0, maxSize.width, maxSize.height);
                }
                else{
                    startRect=CGRectMake(sumWidth, [_originY[i] floatValue], requiredSize.width, requiredSize.height);
                    
                }
                [_strings[i] drawInRect:startRect
                         withAttributes:@{NSFontAttributeName:_fonts[i],
                                          NSForegroundColorAttributeName:_fontColors[i]}];
                
                sumWidth=sumWidth+requiredSize.width;
    
            }
            
            
            
        }
    }
    
    -(instancetype)initWithUnevenHeightStrings:(NSArray *)strings stringFonts:(NSArray *)fonts originY:(NSArray *)originY stringColors:(NSArray *)colors {
        self=[super init];
        self.strings=strings;
        self.fonts=fonts;
        self.originY=originY;
        self.fontColors=colors;
        //[self setNeedsDisplay];
        return self;
    }
    
    @end

    Demo:

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

     UnevenHeightLabel  *label=[[UnevenHeightLabel alloc] initWithUnevenHeightStrings:@[@"11.",@"00",@"%"]  stringFonts:@[[UIFont systemFontOfSize:20],[UIFont systemFontOfSize:25],[UIFont systemFontOfSize:30]] originY:@[@0,@0,@0] stringColors:@[[UIColor redColor],[UIColor blueColor],[UIColor greenColor]]];
        
        label.frame=CGRectMake(100, 100, 200, 30);
        label.backgroundColor=[UIColor clearColor];
        [self.view addSubview:label];
        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]]
                                                                                  originY:@[@0,@0,@0,@0,@0,@0]
                                                                             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];

      

    效果如下:

  • 相关阅读:
    hdu 4302 Holedox Eating 夜
    poj 1947 Rebuilding Roads 夜
    hdu 4303 Hourai Jeweled 夜
    poj 1286 Necklace of Beads 夜
    poj 2057 The Lost House 夜
    hdu 4301 Divide Chocolate 夜
    poj 3140 Contestants Division 夜
    BOM(二)
    Str的方法
    求出字符窜的字母的个数
  • 原文地址:https://www.cnblogs.com/mantgh/p/4381588.html
Copyright © 2011-2022 走看看