SkiaSharp Xamarin: InvalidateSurface () работает на android, но не на ios устройстве - PullRequest
0 голосов
/ 09 марта 2020

Я сделал приложение Xamarin, которое включает график, нарисованный SkiaSharp SKCanvas. Теперь у меня есть следующая проблема:

В соответствии с документацией и руководствами необходимо вызвать InvalidateSurface() Затем вызывается OnPaintSurface(), который можно переопределить. Этот вызов прекрасно работает на эмуляторах и на устройствах android. Но как только я разверну приложение на моем iPhone (iOs 13.3), OnPaintSurface() никогда не вызывается. InvalidateSurface() вызывается изменением свойства зависимости.

Кто-нибудь дает какой-нибудь совет или опыт в отношении этого странного поведения?

Фрагмент кода:

 public class CoordAxesControl : SKCanvasView
{
    private float _absoluteMinXOfCoord;
    private float _absoluteMaxXOfCoord;
    private float _absoluteMinYOfCoord;
    private float _absoluteMaxYOfCoord;
    private SKPaint _blackPaint;


    #region DependencyProperties

    public static readonly BindableProperty PointCoordinatesProperty = 
                BindableProperty.Create(propertyName: nameof(PointCoordinates),
                    returnType: typeof(IEnumerable<Tuple<int,int>>),
                    defaultValue: new List<Tuple<int,int>>(),
                    declaringType: typeof(CoordAxesControl),
                    propertyChanged: DependencyPropertiesChanged);

    public IEnumerable<Tuple<int,int>> PointCoordinates
    {
        get { return _pointCoordinates; }
        set { _pointCoordinates = value; }
    }
    private IEnumerable<Tuple<int, int>> _pointCoordinates;

    #endregion

    #region methods
    private static void DependencyPropertiesChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var control = (CoordAxesControl)bindable;

        if (oldValue != newValue)
        {
            control.PointCoordinates = (List<Tuple<int, int>>)newValue;
            control.InvalidateSurface();
        }
    }


    /// <summary>
    /// Called method when canvas is drawn
    /// </summary>
    /// <param name="e"></param>
    protected override void OnPaintSurface(SKPaintSurfaceEventArgs e)
    {
        if (PointCoordinates == null)
            return;

        var canvas = e.Surface.Canvas;
        canvas.Clear();

        _blackPaint = new SKPaint();
        _blackPaint.Color = SKColors.Black;
        _blackPaint.StrokeWidth = 5;
        //drawing canvas is placed here. Omitted due to clarity 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...