2016-11-14 13 views
1

私は、フレームをサブクラス化してカスタムレンダラを作成することで、IOS XamarinフォームでCardViewを作成しようとしています。私はこのような何かを達成したい:影の設定にAPIを覗く際にIOSのカスタムレンダリングフレームからのCardView

enter image description here

を、私はこれをやった:

[assembly: ExportRenderer(typeof(CardView), typeof(CardViewRenderer))] 
namespace TrabbleMobile.iOS.CustomRenderers 
{ 
    public class CardViewRenderer : FrameRenderer 
    { 
     public override void Draw(CGRect rect) 
     { 
      var cardView = (CardView)this.Element; 

      using (var context = UIGraphics.GetCurrentContext()) 
      { 
       //nfloat cornerRadius = 2; 
       float shadowOffsetWidth = 2; 
       float shadowOffsetHeight = 4; 
       var shadowColor = new CGColor(0, 0, 0, (nfloat)0.5); 
       var boxColor = new CGColor(255, 255, 255); 
       var shadowBlur = (float)0.5; 
       var offset = new CGSize(shadowOffsetWidth, shadowOffsetHeight); 

       context.SetShadow(offset, shadowBlur, shadowColor); 

をそれが必要としてしかし、それはレンダリングされません。また、全く影がない。

+0

https://github.com/xamarin/Xamarin.Forms /blob/74cb5c4a97dcb123eb471f6b1dffa1267d0305aa/Xamarin.Forms.Platform.iOS/Renderers/FrameRenderer.cs#L26 – SushiHangover

+0

こんにちは、あなたは答えにこれを形式化できますか?これを解決するためにあなたがコメントしたドキュメントへのリンクを使用しました。ありがとう! :) – Raven

答えて

2

私はこれをやった、と私はこれをしなかった方法は、IOSのカスタムレンダリングスルーであり、ここでカスタムレンダラコードです:

public class CardViewRenderer : FrameRenderer 
    { 

     public override void Draw(CGRect rect) 
     { 
      SetupShadowLayer(); 
      base.Draw(rect); 
     } 

     void SetupShadowLayer() 
     { 
      Layer.CornerRadius = 2; // 5 Default 
      if (Element.BackgroundColor == Xamarin.Forms.Color.Default) 
      { 
       Layer.BackgroundColor = UIColor.White.CGColor; 
      } 
      else 
      { 
       Layer.BackgroundColor = Element.BackgroundColor.ToCGColor(); 
      } 

      Layer.ShadowRadius = 2; // 5 Default 
      Layer.ShadowColor = UIColor.Black.CGColor; 
      Layer.ShadowOpacity = 0.4f; // 0.8f Default 
      Layer.ShadowOffset = new CGSize(0f, 2.5f); 

      if (Element.OutlineColor == Xamarin.Forms.Color.Default) 
      { 
       Layer.BorderColor = UIColor.Clear.CGColor; 
      } 
      else 
      { 
       Layer.BorderColor = Element.OutlineColor.ToCGColor(); 
       Layer.BorderWidth = 1; 
      } 

      Layer.RasterizationScale = UIScreen.MainScreen.Scale; 
      Layer.ShouldRasterize = true; 
     } 
    }