c# - How to override LayoutSublayersOfLayer behavior of Xamarin.IOS UIButton? -


i'm porting xamarin.ios swift library makes material design animation uibutton.

the swift counterpart subclass of uibutton , overrides layoutsublayersoflayer.

swift:

public override func layoutsublayersoflayer(layer: calayer) {     super.layoutsublayersoflayer(layer)     if self.layer == layer {         layoutshape()         layoutvisuallayer()     } } 

on xamarin side noted method called through calayerdelegate, associated calayer through de property delegate. tried subclass calayerdelegate , replace de delegate property, when did button didn't rendered correctly , stopped respond events.

is there way override layoutsublayersoflayer on xamarin.ios ? there method can override prepare stuff before particular layer drawn ?

public class materialbuttonlayerdelegate : calayerdelegate {      private readonly materialbutton _button;      public materialbuttonlayerdelegate(materialbutton button):base()     {         _button = button;     }      public override void layoutsublayersoflayer(calayer layer)     {         if (_button.layer == layer)         {             _button.layoutshape();             _button.layoutvisuallayer();         }     } }  [register("materialbutton")] public class materialbutton : uibutton {     public cashapelayer visuallayer { get; private set; } = new cashapelayer();      public materialbutton(cgrect frame):base(frame)       {         prepareview();     }      protected void prepareview()     {         layer.delegate = new materialbuttonlayerdelegate(this);          contentscalefactor = materialdevice.scale();         preparevisuallayer();     }      protected virtual void preparevisuallayer()     {         visuallayer.zposition = 0;         visuallayer.maskstobounds = true;         layer.addsublayer(visuallayer);     }      protected virtual void layoutshape()     {         //...     }      protected virtual void layoutvisuallayer()     {         //...     } } 

thanks!

the possible way extending calayerdelegate class , setting cashapelayer delegate. sure call delegate's base members wherever possible performs required bindings behind scenes.

public override void layoutsublayersoflayer(calayer layer) {     base.layoutsublayersoflayer(layer);      if (_button.layer == layer)     {         _button.layoutshape();         _button.layoutvisuallayer();     } } 

Comments