2013-06-04 45 views
0

我試圖使用CAGradientLayer設置梯度到StyledStringElement中的單元格。這是我的代碼至今:將漸變設置爲StyledStringElement

public class DerreckStyledStringElement : StyledStringElement 
{ 
    public DerreckStyledStringElement(string caption) : base(caption) { 
    } 

    public override UITableViewCell GetCell(UITableView tv) 
    { 
     var x = base.GetCell(tv); 
     CAGradientLayer g = new CAGradientLayer(); 
     g.Frame = x.Frame; 
     g.MasksToBounds = true; 
     x.ClipsToBounds = true; 
     g.Colors = new MonoTouch.CoreGraphics.CGColor[] 
     { 
      new UIColor(0f, 153f, 235f, 255f).CGColor, 
      new UIColor(0f, 197f, 244f, 255f).CGColor 
     }; 

     UIView bg = new UIView(x.Bounds); 
     bg.TranslatesAutoresizingMaskIntoConstraints = true; 
     bg.Layer.InsertSublayer(g, 0); 
     x.BackgroundView = bg; 

     this.TextColor = UIColor.White; 
     return x; 
    } 

} 

的按鈕,我在測試這個,這本身坐鎮,看起來像一個方形無圓角和右側延伸到設備的右邊緣。最有可能的是,由於按鈕的左邊距看起來是正確的,因此它可能會更遠離屏幕。

What it should look like 
| /---------------------\ | 
| | BUTTON TEXT  | | 
| \---------------------/ | 

What it looks like 
| |------------------------| 
| | BUTTON TEXT   | 
| |------------------------| 

我曾經g.MasksToBounds = true;的地方,x.ClipsToBounds = true;,和bg.TranslatesAutoresizingMaskIntoConstraints = true;分別在獲得的背景夾到按鈕框架本身的企圖。

由於我沒有修改SelectedBackground,所以點擊它後,它確實顯示了正確的圓角矩形框。

此外,顏色看起來很正確,但漸變看起來拉長,所以按鈕看起來像是漸變中的一種顏色,而不是漸變本身。

我在做什麼錯?

回答

0

單個單元格負責渲染自己的圓角。

有幾種方法,一種是在渲染過程中完成它(參見ImageElement的例子)。另一種方法是,如果選擇沿着圖層路徑,則在圖層上設置CornerRadius屬性。

+0

謝謝,我會檢查出ImageElement,看看它是如何完成的。除此之外,還有沒有其他的方式來做到這一點,而不使用圖像或使用圖層?我發現我只是在頂部添加了一個圖層,並沒有考慮到按鈕的邊界,而且我覺得圖層路線可能不是我們要去的地方。 –