2017-08-15 58 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

我试过设置布局/大小选项,但没有区别。如果我给控制台显示一个背景颜色。但我明白,这不一定与画布大小有关 –

相关问题