如何从UILabel文本创建CGPathRef?

时间:2019-05-27 16:56:27

标签: ios objective-c

我将为UILabel创建一个阴影路径,其中概述了它的文本。 UILabel文本可以以某种方式转换为CGPath吗?

1 个答案:

答案 0 :(得分:1)

我建议最简单的方法是设置图层的阴影属性。

在Objective-C中:

self.label.layer.shadowColor = UIColor.blackColor.CGColor;
self.label.layer.shadowRadius = 10;
self.label.layer.shadowOpacity = 1;
self.label.layer.shadowOffset = CGSizeZero;

在Swift中:

label.layer.shadowColor = UIColor.black.cgColor
label.layer.shadowRadius = 10
label.layer.shadowOpacity = 1
label.layer.shadowOffset = .zero

屈服:

enter image description here

您说:

  

但是,在图层中,我还有一些其他内容,我不想在其中添加阴影。

如果子视图或子图层会干扰阴影,建议您将内容移出标签,并移入其自己的视图层次结构中。不知道要添加到标签中的子图层/子视图是很难做到的。


您说:

  

...我也需要阴影的不透明度,没有层次就不可能。

那不是完全正确。您可以使用NSAttributedString模式并指定Alpha作为shadowColor的一部分。

例如在Objective-C中:

NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowOffset = CGSizeZero;
shadow.shadowBlurRadius = 20;
shadow.shadowColor = [UIColor.blackColor colorWithAlphaComponent:1];

NSDictionary<NSAttributedStringKey, id> *attributes = @{ NSShadowAttributeName: shadow };

NSMutableAttributedString *string = [self.label.attributedText mutableCopy];
[string setAttributes:attributes range:NSMakeRange(0, string.length)];

self.label.attributedText = string;

或者在Swift中:

let shadow = NSShadow()
shadow.shadowOffset = .zero
shadow.shadowBlurRadius = 20
shadow.shadowColor = UIColor.black.withAlphaComponent(1)

let attributes: [NSAttributedString.Key: Any] = [.shadow: shadow]

guard let string = label.attributedText?.mutableCopy() as? NSMutableAttributedString else { return }
string.setAttributes(attributes, range: NSRange(location: 0, length: string.length))
label.attributedText = string