Xamarin.Forms SkiaSharp梯度工作在Android上而不是在iOS
问题描述:
我们需要对我们的网页渐变,所以我们使用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);
}
}
}
答
也许你还没有安装NuGets(包括SkiaSharp和SkiaSharp.Views.Forms)插入iOS项目?
我复制粘贴代码到一个全新的应用程序,它的工作第一次。
一些其他的事情,可能是问题是,视图高度/宽度为0。或者,其中颜色是透明的情况下,不可靠的。
谢谢,这很有趣。我创建了一个空白的新项目,并且它现在也不在Android上工作。通过它进行调试,我可以看到Control的OnCanvasViewPaintSurface方法永远不会被调用。据推测,我在我的XAML或其他地方缺少一些东西来触发此事。 –
您必须确保画布大小不是0x0。什么是布局/容器?您可能必须在渐变视图上设置大小或布局选项。 – Matthew
我试过设置布局/大小选项,但没有区别。如果我给控制台显示一个背景颜色。但我明白,这不一定与画布大小有关 –