2011-10-04 30 views
3

我目前使用UILabel來顯示一些文本。我正在使用CALayer給它一個不錯的影子。但是,當我在屏幕上定位(並移動)大量UILabel元素時,性能非常糟糕。有沒有辦法讓UILabel文本的shadowPath?

我讀過幾篇博文,設置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; 
+0

您好bclaessens,您是否找到了解決方案?謝謝你的迴應! –

回答

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); 
+0

有效的解決方法! ;) – polyclick

+0

是這個rubycocoa? – 1actobacillus

+0

這是C#..我使用monotouch代碼。 –