我在Xamarin表单中创建一个需要渐变按钮背景的iPhone应用程序。我试过了CAGradientLayer
。但是,它不适用于按钮。
有人可以帮我解决这个问题吗? 这是我的按钮渲染器:
protected override void OnElementChanged (ElementChangedEventArgs<Button> e)
{
base.OnElementChanged (e);
if(e.OldElement == null)
{
btn = (UIButton) Control;
btn.Frame = new RectangleF (0, 0, (float)this.Element.WidthRequest, (float)this.Element.HeightRequest);
CAGradientLayer btnGradient = new CAGradientLayer ();
btnGradient.Frame = btn.Bounds;
btnGradient.Colors = new CGColor[]{ Color.White.ToCGColor(), Color.FromHex("#0073BD").ToCGColor() };
btn.Layer.InsertSublayer (btnGradient, 0);
btn.Layer.MasksToBounds = true;
btn.Layer.BorderColor = Color.FromHex("#0073BE").ToCGColor();
btn.Layer.BorderWidth = 1;
btn.SetTitleColor(Color.Black.ToUIColor (), UIControlState.Normal);
}
}
答案 0 :(得分:0)
我建议直接制作渐变图像并直接使用它们,除非您需要在运行时动态创建渐变。如果你去图像路线那么你会做类似的事情:
var regImg = UIImage.FromBundle("myimage.png").ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
var selImg = UIImage.FromBundle("myimage_selected.png").ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
Control.SetBackgroundImage(regImg, UIControlState.Normal);
Control.SetBackgroundImage(selImg, UIControlState.Highlighted);
如果你仍然想要动态创建的渐变路线,请看一下这篇文章 - 你会看到他通过他创建的ImageWithColor()方法动态创建他的图像:
https://forums.xamarin.com/discussion/32240/set-buttontype-in-buttonrenderer-ios-specific
最后,请确保您将按钮的ImageType设置为自定义 - 我没有看到您在渲染器中设置它,默认情况下iOS会在iOS7之后绘制无边框按钮。