我将为UILabel创建一个阴影路径,其中概述了它的文本。 UILabel文本可以以某种方式转换为CGPath吗?
答案 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
屈服:
您说:
但是,在图层中,我还有一些其他内容,我不想在其中添加阴影。
如果子视图或子图层会干扰阴影,建议您将内容移出标签,并移入其自己的视图层次结构中。不知道要添加到标签中的子图层/子视图是很难做到的。
您说:
...我也需要阴影的不透明度,没有层次就不可能。
那不是完全正确。您可以使用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