2017-08-15 79 views
0

我們需要對我們的網頁漸變,所以我們使用SkiaSharp和GradientView。這在Android上正常工作,但不適用於iOS - 漸變只是不顯示。Xamarin.Forms SkiaSharp梯度工作在Android上而不是在iOS

我們需要做任何具體的iOS,初始化爲SkiaSharp在iOS上,用在AppDelegate的渲染器或代碼?

編輯這是在iPad與iOS 10.3.3運行。 我們的XAML:

<?xml version="1.0" encoding="utf-8" ?> 
    <ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
       x:Class="MyProject.XForms.Controls.GradientView"> 
    </ContentView> 

我們XAML.cs

using SkiaSharp; 
using SkiaSharp.Views.Forms; 
using Xamarin.Forms; 

namespace MyProject.XForms.Controls 
{ 
    public partial class GradientView : ContentView 
    { 
     public Color StartColor { get; set; } = Color.Transparent; 
     public Color EndColor { get; set; } = Color.Transparent; 
     public bool Horizontal { get; set; } = false; 

     public GradientView() 
     { 
      InitializeComponent(); 

      SKCanvasView canvasView = new SKCanvasView(); 
      canvasView.PaintSurface += OnCanvasViewPaintSurface; 
      Content = canvasView; 
     } 

     void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) 
     { 
      SKImageInfo info = args.Info; 
      SKSurface surface = args.Surface; 
      SKCanvas canvas = surface.Canvas; 

      canvas.Clear(); 

      var colors = new SKColor[] { StartColor.ToSKColor(), EndColor.ToSKColor() }; 
      SKPoint startPoint = new SKPoint(0, 0); 
      SKPoint endPoint = Horizontal ? new SKPoint(info.Width, 0) : new SKPoint(0, info.Height); 

      var shader = SKShader.CreateLinearGradient(startPoint, endPoint, colors, null, SKShaderTileMode.Clamp); 

      SKPaint paint = new SKPaint 
      { 
       Style = SKPaintStyle.Fill, 
       Shader = shader 
      }; 

      canvas.DrawRect(new SKRect(0, 0, info.Width, info.Height), paint); 
     } 
    } 
} 

回答

0

也許你還沒有安裝NuGets(包括SkiaSharp和SkiaSharp.Views.Forms)插入iOS項目?

我複製粘貼代碼到一個全新的應用程序,它的工作第一次。

一些其他的事情,可能是問題是,視圖高度/寬度爲0。或者,其中顏色是透明的情況下,不可靠的。

+0

謝謝,這很有趣。我創建了一個空白的新項目,並且它現在也不在Android上工作。通過它進行調試,我可以看到Control的OnCanvasViewPaintSurface方法永遠不會被調用。據推測,我在我的XAML或其他地方缺少一些東西來觸發此事。 –

+0

您必須確保畫布大小不是0x0。什麼是佈局/容器?您可能必須在漸變視圖上設置大小或佈局選項。 – Matthew

+0

我試過設置佈局/大小選項,但沒有區別。如果我給控制檯顯示一個背景顏色。但我明白,這不一定與畫布大小有關 –

相關問題