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;
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 に答える