将渐变设置为StyledStringElement

时间:2013-06-04 19:39:32

标签: c# xamarin.ios monotouch.dialog

我正在尝试使用CAGradientLayerStyledStringElement中的单元格设置渐变。这是我到目前为止的代码:

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,因此在点击时会显示正确的圆角矩形框。

此外,颜色看起来正确,但渐变看起来很拉伸,因此按钮看起来像是渐变的一种颜色,而不是渐变本身。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

单个细胞负责用圆角渲染自己。

有几种方法,一种是在渲染过程中执行此操作(请参阅ImageElement示例)。另外,如果您选择沿着图层路径向下,则在图层上设置CornerRadius属性。