一个能够绘制属性字符串并添加外轮廓、内阴影和渐变的标签。支持所有属性字符串属性,如 NSTextAttachments、NSParagraphStyles 等。
鼓励您设置标签的 attributedString
属性。但也有一些方便的设置器为 UILabel 的默认属性,如 text
、textColor
、textAlignment
和 font
。
LTMLabel* label = [[LTMLabel alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
label.attributedString = [[NSAttributedString alloc] initWithString:@"Test text to draw"];
添加单条轮廓
label.strokeColor = [UIColor blackColor];
label.strokeWidth = 4;
添加多条轮廓
label.strokeColors = @[[UIColor whiteColor], [UIColor blackColor]];
label.strokeWidths = @[@3, @6];
注意,轮廓宽度是整体宽度,不是增加的。因此,白色轮廓的宽度为 3,黑色轮廓的宽度为 6,但其中的 3 将被白色轮廓覆盖。
要添加单个内阴影,您可将一个 NSShadow 对象设置为 innerShadow
属性
NSShadow* shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor whiteColor];
shadow.shadowOffset = CGSizeMake(0, 2);
shadow.shadowBlurRadius = 0;
label.innerShadow = shadow;
要添加多个内阴影,将多个阴影对象添加到 innerShadows
数组中。
您可以使用 innerShadowBlendMode
或 innerShadowBlendModes
属性来更改内阴影混合模式。
label.innerShadowBlendMode = kCGBlendModeDarken;
label.innerShadowBlendModes = @[@(kCGBlendModeDarken), @(kCGBlendModeOverlay)];
您可以设置渐变的起始点和结束点以及不同的颜色。默认是从上到下的线性渐变
label.gradientStartColor = [UIColor yellowColor];
label.gradientEndColor = [UIColor orangeColor];
或设置多种颜色
label.gradientColors = @[[UIColor yellowColor], [UIColor orangeColor], [UIColor redColor]];
要更改起始点或结束点,设置 gradientStartPoint
和 gradientEndPoint
。这些值在 0-1 的范围内。要从左到右设置渐变,请执行以下操作:
label.gradientStartPoint = CGPointMake(0, 0.5);
label.gradientEndPoint = CGPointMake(1, 0.5);
通过将 minimumScaleFactor
属性设置为小于 1 的值,您可以在标签文本不适应其框架时实现字体缩放。
如果您想要您的标签根据其内容文本长度在高度或宽度上增长,请设置 maxSize
属性。这定义了标签可以增长的最大尺寸。在设置属性字符串时,会计算新的标签尺寸,这样您可以立即访问它的新尺寸,并在新的标签尺寸中进行进一步的定位。
要创建一个在高度上增长并缩小其文本的标签
LTMLabel* growAndScaleLabel = [[LTMLabel alloc] initWithFrame:CGRectMake(0, 0, 200, 50)];
growAndScaleLabel.minimumScaleFactor = 0.75;
growAndScaleLabel.maxSize = CGSizeMake(CGRectGetWidth(growAndScaleLabel.bounds), 150);
原作来源及灵感来自