Xamarin iOS圆形按钮只有一些角落

kfgdxczn  于 2022-12-07  发布在  iOS
关注(0)|答案(2)|浏览(818)

我需要在Xamarin上实现这个效果。iOS上的一个按钮(所以只是图像中带圆角的蓝色按钮),基本上只是把按钮的任何一个角弄圆,但不是一次把所有的都弄圆。我不喜欢使用另一个nuget包,比如“煎饼”,我认为这是一个答案。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);

            // ?
        }
    }
abithluo

abithluo1#

您可以在iOS课程中使用MaskedCorners来控制图形的显示。
以下是我的实现类,供您参考:

[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;
        }
   
    }
}
p1iqtdky

p1iqtdky2#

上面的答案有效,但如果有人想改变所有的角落,必须包括CoreAnimation.CACornerMask.MinXMinYCorner|CoreAnimation.CACornerMask.MinXMaxYCorner为“MaskedCorners”。

相关问题