Как создать CGPathRef из текста UILabel? - PullRequest
0 голосов
/ 27 мая 2019

Я собираюсь создать теневой путь для UILabel, который обрисовывает в общих чертах его текст. Является ли текст UILabel каким-либо образом конвертируемым в CGPath?

1 Ответ

1 голос
/ 28 мая 2019

Я полагаю, что самый простой подход - установить свойства тени слоя.

В 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 и указать альфа как часть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...