有没有办法获取UILabel文本的shadowPath?

时间:2011-10-04 12:14:53

标签: ios uilabel shadowpath

我目前正在使用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;

1 个答案:

答案 0 :(得分: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);