美文网首页
iOS开发 给label 每个数字字添加正方形的背景色块

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

作者: iOS门三闫 | 来源:发表于2024-07-02 23:36 被阅读0次

自定义一个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];

    }

}

相关文章

网友评论

      本文标题:iOS开发 给label 每个数字字添加正方形的背景色块

      本文链接:https://www.haomeiwen.com/subject/oilbcjtx.html