• xamarin.ios 半圆角按钮Readerer


          xamarin.from上可以使用本身的button实现圆角带图标的按钮,但是没有半圆角的按钮实现,需要自己使用Renderer重新写过来重写一个button。

        下面是一个重写的带边框的方式,代码如下:

     1 using UIKit;
     2 using Xamarin.Forms.Platform.iOS;
     3 using Xamarin.Forms;
     4 using CoreAnimation;
     5 using System.ComponentModel;
     6 
     7 [assembly: ExportRenderer(typeof(Test.Renderers.MyRadiusButton), typeof(Test.iOS.Renderers.MyRadiusButton))]
     8 namespace Test.iOS.Renderers
     9 {
    10     public class MyRadiusButton : ButtonRenderer
    11     {
    12         bool btnStatus = true;
    13         bool radiusLeft = true;
    14         protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    15         {
    16             base.OnElementChanged(e);
    17             Test.Renderers.MyRadiusButton view = Element as Test.Renderers.MyRadiusButton;
    18             radiusLeft = view.RadiusLeft;
    19             if (e.OldElement == null)
    20             {
    21                 UIBezierPath maskPath;
    22 
    23 
    24                 double widthLength = 600 / 2 - 10;
    25                 maskPath = UIBezierPath.FromRoundedRect(new CoreGraphics.CGRect(0, 0, widthLength, 35), UIRectCorner.TopLeft | UIRectCorner.BottomLeft, new CoreGraphics.CGSize(18, 18));
    26 
    27                 CAShapeLayer maskLayer = new CAShapeLayer();
    28                 //maskLayer.Frame = new CoreGraphics.CGRect(0, 0, widthLength, 35);
    29                 maskLayer.Path = maskPath.CGPath;
    30                 maskLayer.StrokeColor = new CoreGraphics.CGColor(0, 0, 0);//边框颜色
    31 
    32                 CAShapeLayer borderLayer = new CAShapeLayer();
    33                 borderLayer.Path = maskPath.CGPath;
    34                 borderLayer.Frame = new CoreGraphics.CGRect(0, 0, widthLength, 35);
    35                 borderLayer.FillColor = new CoreGraphics.CGColor(1, 1, 1, 0f);
    36                 borderLayer.StrokeColor = new CoreGraphics.CGColor(0.23f, 0.72f, 0.47f, 1.0f);
    37                 borderLayer.LineWidth = 1;
    38 
    39                 Control.Layer.Mask = maskLayer;
    40                 Control.Layer.AddSublayer(borderLayer);
    41                 Control.Layer.MasksToBounds = true;
    42                 Control.SetTitleColor(UIColor.FromRGB(255, 255, 255), UIControlState.Normal);
    43                 Control.BackgroundColor = UIColor.FromRGB(59, 183, 120);
    44 
    45                 view.Clicked += (sender, even) =>
    46                 {
    47                     if (!view.BtnSelected)
    48                     {
    49                         if (btnStatus)
    50                         {
    51                             Control.SetTitleColor(UIColor.FromRGB(59, 183, 120), UIControlState.Normal);
    52                             Control.BackgroundColor = UIColor.FromRGB(222, 222, 222);
    53                             btnStatus = !btnStatus;
    54                         }
    55                         else
    56                         {
    57                             Control.SetTitleColor(UIColor.FromRGB(255, 255, 255), UIControlState.Normal);
    58                             Control.BackgroundColor = UIColor.FromRGB(59, 183, 120);
    59                             btnStatus = !btnStatus;
    60                         }
    61                         view.BtnClickAction?.Invoke();
    62                     }
    63                 };
    64                 
    65             }
    66         }
    67     }
    68 }
  • 相关阅读:
    【转】第 02 天:在 Windows 平台必裝的三套 Git 工具
    【转】整理一下Android中的ListView
    【转】Git图形化界面客户端大汇总
    【转】探讨android更新UI的几种方法----不错
    【转】MTK Android Driver知识大全
    【转】Linux I2C设备驱动编写(三)-实例分析AM3359
    【转】Linux I2C设备驱动编写(二)
    【转】Linux I2C设备驱动编写(一)
    【转】(DT系列六)devicetree中数据和 struct device有什么关系
    空间同构(isomorphic)
  • 原文地址:https://www.cnblogs.com/zuimengaitianya/p/7156160.html
Copyright © 2020-2023  润新知