iOS开发 给label 每个数字字添加正方形的背景色块

自定义一个UILable类,重写drawTextInRect方法绘制数字和背景。
- (void)drawTextInRect:(CGRect)rect {

    // 获取字符串

    NSString*text =self.text;

    if(!text) {

        return;

    }


    // 字体属性

    NSDictionary *attributes = @{NSFontAttributeName: self.font, NSForegroundColorAttributeName: self.textColor};


    // 设置背景颜色、圆角半径和方块间距

    UIColor*backgroundColor =kColor(@"#FF604A");

    CGFloatcornerRadius = 4.0;

    CGFloatspacing =4.0;// 方块之间的间距


    // 计算总宽度

    CGFloattotalWidth =0.0;

    NSMutableArray *charSizes = [NSMutableArray array];


    for(NSUIntegeri =0; i < text.length; i++) {

        unicharcharacter = [textcharacterAtIndex:i];

        NSString*characterString = [NSStringstringWithCharacters:&characterlength:1];

        CGSizecharSize = [characterStringsizeWithAttributes:attributes];

        [charSizesaddObject:[NSValuevalueWithCGSize:charSize]];

        totalWidth +=MAX(charSize.width, charSize.height) + spacing;

    }


    totalWidth -= spacing;// 移除最后一个间距


    // 计算起始点

    CGFloatstartX =0.0;

    switch (self.textAlignment) {

        case NSTextAlignmentCenter:

            startX = (rect.size.width- totalWidth) /2.0;

            break;

        case NSTextAlignmentRight:

            startX = rect.size.width- totalWidth;

            break;

        default:

            startX =0.0;

            break;

    }


    // 遍历每个字符并绘制

    for(NSUIntegeri =0; i < text.length; i++) {

        unicharcharacter = [textcharacterAtIndex:i];

        NSString*characterString = [NSStringstringWithCharacters:&characterlength:1];

        CGSizecharSize = [charSizes[i]CGSizeValue];


        CGFloatsideLength =MAX(charSize.width, charSize.height);

        CGPointcharOrigin =CGPointMake(startX + i * (sideLength + spacing), (rect.size.height- sideLength) /2);


        CGRectcharBackgroundRect =CGRectMake(charOrigin.x, charOrigin.y, sideLength, sideLength);

        UIBezierPath*path = [UIBezierPathbezierPathWithRoundedRect:charBackgroundRectcornerRadius:cornerRadius];

        [backgroundColorsetFill];

        [pathfill];


        CGPointcharDrawPoint =CGPointMake(charOrigin.x+ (sideLength - charSize.width) /2, charOrigin.y+ (sideLength - charSize.height) /2);

        [characterStringdrawAtPoint:charDrawPointwithAttributes:attributes];

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 晚上下班回来经常盯着手机屏幕发呆,就想写点什么,打发下漫长的夜晚,并记录下工作中的点点滴滴。 1.tablevie...
    so_what阅读 1,864评论 3 5
  • 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新。 UITableView的Group样式下顶部...
    UI爱好者阅读 537评论 0 0
  • 原文 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新。 1.UITableView的Group...
    无沣阅读 796评论 0 2
  • UITableView的Group样式下顶部空白处理分组列表头部空白处理UIView*view = [[UIVie...
    没技术的BUG开发攻城狮阅读 720评论 0 0
  • UITableView的Group样式下顶部空白处理//分组列表头部空白处理UIView *view = [[UI...
    阿兹尔阅读 351评论 0 1