【发布时间】:2015-01-06 15:28:38
【问题描述】:
我想将this 移植到 C#。
我不知道该如何转换:
@property (nonatomic, strong, readonly) CAGradientLayer *layer;
layer 是 UIView 的默认层。 Xamarin 已经有一个 Layer 属性。我该如何覆盖这个?我需要覆盖它吗?
我也试过了
public CAGradientLayer layer { [Export ("Layer")] get; [Export ("Layer:")] set; }
但如果我想设置图层的颜色,应用程序会崩溃(System.Reflection.TargetInvocationException - 使单元出队时出现 NullReferenceException)。此外,它应该是只读的。
然后我在documentation看到了怎么转换的:
public class BlueView : UIView
{
[Export ("layerClass")]
public static Class GetLayerClass ()
{
return new Class (typeof (BlueLayer));
}
public override void Draw (RectangleF rect)
{
// Do nothing, the Layer will do all the drawing
}
}
public class BlueLayer : CALayer
{
public override void DrawInContext (CGContext ctx)
{
ctx.SetFillColor (0, 0, 1, 1);
ctx.FillRect (Bounds);
}
}
这对我没有帮助,因为我需要像 SetFillColors 这样的东西,以便我可以使用 CGColor[] 数组。但是没有这个功能。
如何使用 Monotouch 在 C# 中使用我的自定义 CAGradientLayer 创建我的 UIView?
【问题讨论】:
-
请详细解释一下,为什么没有帮助?您想使用哪种 SetFillColors 方法,但不能?
-
只有
SetFillColor没有s。有不同的SetFillColor方法可用。一个需要float[] components。另一个CGColor。没有采用CGColor[]的方法。 -
我在任何地方都找不到 SetFillColors 方法。显然,没有这样的方法可用。但是,由于您正在谈论 CAGradientLayer,因此请从该类中覆盖您的类,而不是 CALayer。 CAGradientLayer 有一个 Colors 属性,它是一个 CGColor[]。如果我猜对了你想做什么......
-
感谢您的回复。一个普通的
UIView有一个CALayer的Layer属性。我想将其与CAGradientLayer交换,如链接的 SO 问题中所示。我想使用Colors属性,但在这种情况下我应该怎么做?我尝试了一些方法,但都没有奏效。
标签: c# ios xamarin.ios xamarin cagradientlayer