public override void Draw(CGRect rect) { base.Draw(rect); GradientColorStackLayout stack = (GradientColorStackLayout)this.Element; CGColor startColor = stack.StartColor.ToCGColor(); CGColor endColor = stack.EndColor.ToCGColor(); var gradientLayer = new CAGradientLayer(); gradientLayer.Frame = rect; gradientLayer.Colors = new CGColor[] { startColor, endColor }; NativeView.Layer.InsertSublayer(gradientLayer, 0); }
protected override void OnElementChanged(ElementChangedEventArgs <StackLayout> e) { base.OnElementChanged(e); if (e.OldElement != null || Element == null) { return; } try { _stack = e.NewElement as GradientColorStackLayout; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(@"ERROR:", ex.Message); } }
public override void Draw(CGRect rect) { base.Draw(rect); GradientColorStackLayout stack = this.Element as GradientColorStackLayout; CGColor startColor = stack.StartColor.ToCGColor(); CGColor centerColor = stack.CenterColor.ToCGColor(); CGColor endColor = stack.EndColor.ToCGColor(); float yCenter = stack.YCenter; ItemsLayoutOrientation direction = stack.Direction; bool hasCenterColor = stack.HasCenterColor; CAGradientLayer gradientLayer = null; if (direction == ItemsLayoutOrientation.Vertical) { gradientLayer = new CAGradientLayer(); } if (direction == ItemsLayoutOrientation.Horizontal) { gradientLayer = new CAGradientLayer() { StartPoint = new CGPoint(0, 0.5), EndPoint = new CGPoint(1, 0.5) }; } gradientLayer.Frame = rect; if (hasCenterColor) { gradientLayer.Locations = new NSNumber[] { new NSNumber(0.5F), new NSNumber(yCenter), new NSNumber(1F) }; gradientLayer.Colors = new CGColor[] { startColor, centerColor, endColor }; } else { gradientLayer.Locations = new NSNumber[] { new NSNumber(yCenter), new NSNumber(1F) }; gradientLayer.Colors = new CGColor[] { startColor, endColor }; } NativeView.Layer.InsertSublayer(gradientLayer, 0); }