2013-06-04 25 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,看看它是如何完成的。除此之外,还有没有其他的方式来做到这一点,而不使用图像或使用图层?我发现我只是在顶部添加了一个图层,并没有考虑到按钮的边界,而且我觉得图层路线可能不是我们要去的地方。 –