自定义一个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];
}
}
网友评论