C# SkiaSharep Xamarin:InvalidateSurface()可以在android上工作,但不能在ios设备上工作
我制作了一个Xamarin应用程序,其中包括一个由SkiaSharp SKCanvas绘制的图形。现在我有以下问题: 根据文档和教程,需要调用C# SkiaSharep Xamarin:InvalidateSurface()可以在android上工作,但不能在ios设备上工作,c#,ios,xamarin,C#,Ios,Xamarin,我制作了一个Xamarin应用程序,其中包括一个由SkiaSharp SKCanvas绘制的图形。现在我有以下问题: 根据文档和教程,需要调用InvalidateSurface(),然后调用可以覆盖的OnPaintSurface()。这个调用在模拟器和android设备上运行良好。但一旦我将应用程序部署到我的iPhone(iOs 13.3)上,OnPaintSurface()就永远不会被调用InvalidateSurface()由依赖项属性的更改调用 有人对这种奇怪的行为有什么建议或经验吗 代码
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
公共类协同控制:SKCanvasView
{
私人浮动(绝对最低限额);;
私人浮动(绝对最大浮动);;
私人浮动(绝对最低限额);;
私人浮动(绝对最大浮动);;
私人油漆(黑色油漆),;
#区域依赖性房地产
公共静态只读BindableProperty PointCoordinateProperty=
创建(propertyName:nameof(PointCoordinates),
returnType:typeof(IEnumerable),
defaultValue:新建列表(),
declaringType:typeof(CoordAxesControl),
属性更改:从属属性更改);
公共IEnumerable点坐标
{
获取{return\u pointCoordinates;}
设置{u pointCoordinates=value;}
}
私有IEnumerable_点坐标;
#端区
#区域方法
私有静态void dependencProperties已更改(BindableObject bindable、object oldValue、object newValue)
{
var控制=(CoordAxesControl)可绑定;
如果(旧值!=新值)
{
control.PointCoordinates=(列表)newValue;
控件。使曲面无效();
}
}
///
///绘制画布时调用方法
///
///
漆面上受保护的覆盖无效(SKPAINTSURFACHEVENTARGS e)
{
如果(点坐标==null)
返回;
var canvas=e.Surface.canvas;
canvas.Clear();
_blackPaint=新SKPaint();
_blackPaint.Color=SKColors.Black;
_blackPaint.StrokeWidth=5;
//绘图画布放在这里。由于清晰,省略了
不要描述代码,而是向我们展示相关的portions@Jason我已经添加了相关的代码snippet@CJThiele您好,您是否尝试过使用其他具有不同软件版本的iPhone设备进行测试?以及在物理设备中运行时是否出现错误日志。@JuniorJiang MSFT我使用iPhone SE进行了尝试,但不幸的是,它是我的iPhone 8上安装了相同的iOs版本,所以它也不起作用。现在我在华为Mate 10上试用了它,在Android上也没有问题……所以这必须是iOs特有的problem@CJThiele您好,谢谢分享。不过,它在我的本地网站上工作,无论是在模拟器还是物理设备上。我想您可以分享未发布的屏幕截图在这里检查。