一个可以绘制属性字符串并添加外边框、内阴影和渐变的标签。支持所有属性字符串属性 - 如 NSTextAttachments、NSParagraphStyles 等。
您被鼓励设置标签的 attributedString
属性。但也有一些方便的设置器供 UILabel 默认属性,如 text
、textColor
、textAlignment
和 font
。
SEBLabel* label = [[SEBLabel 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
属性。这定义了标签允许增长的最大尺寸。在设置属性字符串时,将计算新的标签大小,因此您可以立即访问它的新尺寸,并在新的标签尺寸中执行进一步的位置调整。
要创建一个在高度上增长并将文本缩小的标签
SEBLabel* growAndScaleLabel = [[SEBLabel alloc] initWithFrame:CGRectMake(0, 0, 200, 50)];
growAndScaleLabel.minimumScaleFactor = 0.75;
growAndScaleLabel.maxSize = CGSizeMake(CGRectGetWidth(growAndScaleLabel.bounds), 150);
原始源码和灵感来自