diff options
Diffstat (limited to 'Xamarin.Forms.Platform.iOS/Renderers/FrameRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.iOS/Renderers/FrameRenderer.cs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/FrameRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/FrameRenderer.cs new file mode 100644 index 00000000..3f2f1ccb --- /dev/null +++ b/Xamarin.Forms.Platform.iOS/Renderers/FrameRenderer.cs @@ -0,0 +1,61 @@ +using System.ComponentModel; +using System.Drawing; +#if __UNIFIED__ +using UIKit; + +#else +using MonoTouch.UIKit; +#endif + +namespace Xamarin.Forms.Platform.iOS +{ + public class FrameRenderer : VisualElementRenderer<Frame> + { + protected override void OnElementChanged(ElementChangedEventArgs<Frame> e) + { + base.OnElementChanged(e); + + if (e.NewElement != null) + SetupLayer(); + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if (e.PropertyName == VisualElement.BackgroundColorProperty.PropertyName || e.PropertyName == Xamarin.Forms.Frame.OutlineColorProperty.PropertyName || + e.PropertyName == Xamarin.Forms.Frame.HasShadowProperty.PropertyName) + SetupLayer(); + } + + void SetupLayer() + { + Layer.CornerRadius = 5; + if (Element.BackgroundColor == Color.Default) + Layer.BackgroundColor = UIColor.White.CGColor; + else + Layer.BackgroundColor = Element.BackgroundColor.ToCGColor(); + + if (Element.HasShadow) + { + Layer.ShadowRadius = 5; + Layer.ShadowColor = UIColor.Black.CGColor; + Layer.ShadowOpacity = 0.8f; + Layer.ShadowOffset = new SizeF(); + } + else + Layer.ShadowOpacity = 0; + + if (Element.OutlineColor == Color.Default) + Layer.BorderColor = UIColor.Clear.CGColor; + else + { + Layer.BorderColor = Element.OutlineColor.ToCGColor(); + Layer.BorderWidth = 1; + } + + Layer.RasterizationScale = UIScreen.MainScreen.Scale; + Layer.ShouldRasterize = true; + } + } +}
\ No newline at end of file |