有没有一种方法可以获取UILabel文本的shadowPath?

3

我目前正在使用UILabel显示一些文本。 我使用CALayer来为其添加漂亮的阴影。 但是:当我在屏幕上定位(和移动)大量UILabel元素时,性能真的很差。

我在几篇博客文章中读到,设置CALayer的shadowPath可以优化性能。我尝试了一个圆角矩形,它确实有效。 现在我正在尝试弄清楚如何获取UILabel上文本的shadowPath。

有人有想法吗?否则我想我必须在核心图形中呈现我的文本。

这是一个带有矩形层的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;

你好bclaessens,你找到解决方案了吗?谢谢回复! - Henning Schulz
1个回答

3
我找到了一个对我非常有效的解决方案。只需像这个示例那样从标签中制作图像即可:
            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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接