public void TrackingStarted(object sender, TrackingEventArgs e)
        {
            var button = (ButtonView)sender;

            UIGraphics.BeginImageContext(button.Bounds.Size);
            button.Layer.RenderInContext(UIGraphics.GetCurrentContext());
            UIImage image = UIGraphics.GetImageFromCurrentImageContext();

            UIGraphics.EndImageContext();

            if (trackingImageView == null)
            {
                trackingImageView = new UIImageView(CGRect.Empty);
                Superview.AddSubview(trackingImageView);
                trackingImageView.Alpha = 0.5f;
            }

            trackingImageView.Image = image;
            trackingImageView.SizeToFit();
            CGRect frame    = trackingImageView.Frame;
            var    newFrame = new CGRect(Superview.ConvertPointFromView(button.Frame.Location, this), frame.Size);

            trackingImageView.Frame = newFrame;
            if (ButtonSelectedEvent != null)
            {
                ButtonSelectedEvent(button);
            }
        }
        public void  TrackingEnded(object sender, TrackingEventArgs e)
        {
            var button = (ButtonView)sender;

            ButtonFinishedEvent?.Invoke(button, trackingImageView, e.Touch);
            trackingImageView = null;
        }
        public void TrackingContinued(object sender, TrackingEventArgs e)
        {
            var     button   = (ButtonView)sender;
            UITouch location = e.Touch;

            CGPoint point    = location.LocationInView(Superview);
            CGRect  frame    = trackingImageView.Frame;
            var     newPoint = new CGPoint(point.X - button.Frame.Size.Width / 2, point.Y - button.Frame.Size.Height / 2);
            var     newFrame = new CGRect(newPoint, frame.Size);

            trackingImageView.Frame = newFrame;
            if (ButtonDraggedEvent != null)
            {
                ButtonDraggedEvent(button, location);
            }
        }