Xamarin iOS 只圆一个按钮的一些角
Xamarin iOS Round only some corners of a Button
我需要在 Xamarin.iOS 上为一个按钮实现这种效果(所以只有图像中带有圆角的蓝色按钮),基本上只是使按钮的任何角变圆,但不是所有的角都在一次。我不喜欢使用另一个 nuget 包,比如我认为是答案的“Pancake”。 iOS 上是否有任何特定于平台的定制来匹配 Android?
我在 ANDROID 上做到了,就像这样:
public class DroidCustomButtonRenderer : ButtonRenderer
{
public DroidCustomButtonRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Forms.Button> e)
{
base.OnElementChanged(e);
if (Control != null)
{
GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.SetColor(global::Android.Graphics.Color.ParseColor(AppConstants.Constants.CUSTOM_BACK_BUTTON_COLOR_NEW));
float[] radius = new float[8];
radius[0] = 0; //Top Left corner
radius[1] = 0; //Top Left corner
radius[2] = 46f; //Top Right corner
radius[3] = 46f; //Top Right corner
radius[4] = 46f; //Bottom Right corner
radius[5] = 46f; //Bottom Right corner
radius[6] = 0; //Bottom Left corner
radius[7] = 0; //Bottom Left corner
gradientDrawable.SetCornerRadii(radius);
Control.SetBackground(gradientDrawable);
}
}
}
我怎样才能在 iOS 上实现相同的效果?
public class iOSCustomButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
// ?
}
}
您可以在 iOS class 中使用 MaskedCorners 来控制图形的显示。
下面是我的实现class供大家参考:
[assembly: ExportRenderer(typeof(CustomButton),typeof(CurvedCornersButtonRenderer))]
namespace xxx.iOS
{
class CurvedCornersButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
Control.BackgroundColor = UIColor.Blue;
Control.ClipsToBounds = true;
Control.Layer.CornerRadius = 15;
Control.Layer.MaskedCorners = CoreAnimation.CACornerMask.MaxXMinYCorner | CoreAnimation.CACornerMask.MaxXMaxYCorner;
}
}
}
我需要在 Xamarin.iOS 上为一个按钮实现这种效果(所以只有图像中带有圆角的蓝色按钮),基本上只是使按钮的任何角变圆,但不是所有的角都在一次。我不喜欢使用另一个 nuget 包,比如我认为是答案的“Pancake”。 iOS 上是否有任何特定于平台的定制来匹配 Android?
我在 ANDROID 上做到了,就像这样:
public class DroidCustomButtonRenderer : ButtonRenderer
{
public DroidCustomButtonRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Forms.Button> e)
{
base.OnElementChanged(e);
if (Control != null)
{
GradientDrawable gradientDrawable = new GradientDrawable(); gradientDrawable.SetColor(global::Android.Graphics.Color.ParseColor(AppConstants.Constants.CUSTOM_BACK_BUTTON_COLOR_NEW));
float[] radius = new float[8];
radius[0] = 0; //Top Left corner
radius[1] = 0; //Top Left corner
radius[2] = 46f; //Top Right corner
radius[3] = 46f; //Top Right corner
radius[4] = 46f; //Bottom Right corner
radius[5] = 46f; //Bottom Right corner
radius[6] = 0; //Bottom Left corner
radius[7] = 0; //Bottom Left corner
gradientDrawable.SetCornerRadii(radius);
Control.SetBackground(gradientDrawable);
}
}
}
我怎样才能在 iOS 上实现相同的效果?
public class iOSCustomButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
// ?
}
}
您可以在 iOS class 中使用 MaskedCorners 来控制图形的显示。
下面是我的实现class供大家参考:
[assembly: ExportRenderer(typeof(CustomButton),typeof(CurvedCornersButtonRenderer))]
namespace xxx.iOS
{
class CurvedCornersButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
Control.BackgroundColor = UIColor.Blue;
Control.ClipsToBounds = true;
Control.Layer.CornerRadius = 15;
Control.Layer.MaskedCorners = CoreAnimation.CACornerMask.MaxXMinYCorner | CoreAnimation.CACornerMask.MaxXMaxYCorner;
}
}
}