Есть ли способ получить shadowPath для текста UILabel?
В настоящее время я использую UILabel для отображения текста. Я использую CALayer, чтобы придать ему хорошую тень. Но: производительность действительно плохая, когда я размещаю (и перемещаю) множество элементов UILabel на экране.
В нескольких блогах я читал, что установка shadowPath в CALayer оптимизирует производительность, я сделал снимок с закругленным прямоугольником, и он действительно работает. Итак, теперь я пытаюсь выяснить, как получить shadowPath для текста на UILabel.
У кого-нибудь есть идея? В противном случае, я думаю, мне придется визуализировать мой текст в графике.
Вот пример с shadowPath на прямоугольном слое:
backgroundImage.layer.shadowOffset = CGSizeMake(0, 0);
backgroundImage.layer.shadowRadius = LIST_TITLE_VIEW_SHADOW_SIZE;
backgroundImage.layer.shadowOpacity = LIST_TITLE_VIEW_SHADOW_OPACITY;
backgroundImage.layer.shadowPath = [UIBezierPath bezierPathWithRect:backgroundImage.bounds].CGPath;
1 ответ
Решение
Я нашел решение, которое работает как шарм для меня. Просто сделайте изображение из метки, как в этом примере:
UILabel employeeName = new UILabel(new RectangleF(7, 49, this.View.Bounds.Width, 50));
employeeName.Text = "David Johnson";
employeeName.Font = UIFont.SystemFontOfSize(23);
employeeName.BackgroundColor = UIColor.Clear;
employeeName.TextColor = UIColor.White;
employeeName.Layer.ShadowColor = UIColor.Black.CGColor;
employeeName.Layer.ShadowOffset = new SizeF(1,1);
employeeName.Layer.ShadowOpacity = 10;
employeeName.Layer.ShadowRadius = 0.8f;
UIGraphics.BeginImageContextWithOptions(employeeName.Bounds.Size, false, 0);
employeeName.Layer.RenderInContext(UIGraphics.GetCurrentContext());
UIImageView employeeNameImage = new UIImageView(UIGraphics.GetImageFromCurrentImageContext());
employeeNameImage.Frame = new RectangleF(7, 49, this.View.Bounds.Width, 50);
imageView.AddSubview(employeeNameImage);