3

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

我在一些博文中读到设置 CALayer 的 shadowPath 可以优化性能,我用圆角矩形对其进行了测试,它确实有效。所以现在我想弄清楚如何获取 UILabel 上文本的 shadowPath。

有人有想法吗?否则,我猜我将不得不在 coregraphics 中呈现我的文本。

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

1 回答 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);
于 2012-07-05T08:37:44.777 回答