Nous avons besoin d'un dégradé sur nos pages, nous utilisons donc SkiaSharp et un GradientView. Cela fonctionne très bien sur Android, mais ne fonctionne pas sur iOS - le dégradé ne s'affiche pas.Xamarin.Forms SkiaSharp Dégradé travaillant sur Android mais pas sur iOS
Devons-nous effectuer une initialisation spécifique à iOS pour SkiaSharp sur iOS, avec des moteurs de rendu ou du code dans AppDelegate?
Modifier Ceci fonctionne sur un iPad avec iOS 10.3.3. Notre 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>
Nos 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);
}
}
}
Merci, c'est intéressant. J'ai créé un nouveau projet vide, et il ne fonctionne pas non plus sur Android. Débogage à travers elle, je peux voir que la méthode OnCanvasViewPaintSurface du contrôle n'est jamais appelée. Vraisemblablement, il me manque quelque chose dans mon XAML ou ailleurs pour déclencher cela. –
Vous devez vous assurer que la taille du canevas n'est pas 0x0. Quelle est la disposition/conteneur? vous devrez peut-être définir une taille ou des options de mise en page dans la vue en dégradé. – Matthew
J'ai essayé de définir les options de disposition/taille mais pas de différence. Si je donne au contrôle une couleur de fond qui apparaît. Mais j'apprécie que ce n'est pas nécessairement lié à la taille de la toile –