C# Xamarin中的CorePlot动画

C# Xamarin中的CorePlot动画,c#,xamarin.ios,xamarin,core-plot,C#,Xamarin.ios,Xamarin,Core Plot,我正在尝试在Xamarin中设置范围转换动画,但遇到了一些问题: public void SetXRange(浮动范围){ CPTXYPlotSpace=graph.DefaultPlotSpace作为CPTXYPlotSpace; CPTPlotRange xRange=新的CPTPlotRange((NSDecimal)range,(NSDecimal)range); 制作动画( NSObject.FromObject(空间), “XRange”, 新的CPTAnimationPeriod(

我正在尝试在Xamarin中设置范围转换动画,但遇到了一些问题:

public void SetXRange(浮动范围){
CPTXYPlotSpace=graph.DefaultPlotSpace作为CPTXYPlotSpace;
CPTPlotRange xRange=新的CPTPlotRange((NSDecimal)range,(NSDecimal)range);
制作动画(
NSObject.FromObject(空间),
“XRange”,
新的CPTAnimationPeriod(space.XRange、XRange、2f、0f),
Cptanimation曲线。线性,
新的CPTAnimationDelegate());
}
这将导致此处描述的错误:

但是,相同的解决方案不适用,因为如果我将委托设置为
null
,则会出现另一个错误:

“已引发System.ArgumentNullException。参数不能为null。参数名称:animationDelegate”

即使在尝试创建委托和设置时,
MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure=false我没有得到动画,我只是避免了错误


有人有Xamarin的CorePlot动画吗?

确保您实现了CPTAnimationDelegate。比如:

public class CptDelegate : CPTAnimationDelegate
{
    public override void AnimationCancelled (CPTAnimationOperation operation)
    {
    }

    public override void AnimationDidFinish (CPTAnimationOperation operation)
    {
    }

    public override void AnimationDidStart (CPTAnimationOperation operation)
    {
    }

    public override void AnimationDidUpdate (CPTAnimationOperation operation)
    {
    }

    public override void AnimationWillUpdate (CPTAnimationOperation operation)
    {
    }
}
然后反过来创建动画,从实际范围到最小范围设置动画。所以它应该更像这样(取自我的appcode,效果很好):


我不打算将此作为答案,因为我不知道核心图,也无法尝试我的解决方案,但我建议您使用不做任何事情的方法实现
MyCPTAnimationDelegate:CPTAnimationDelegate
,实例化该方法的一个实例(
myDelegate=new MyCPTAnimationDelegate()
)并传递该对象。它不会抛出异常,但不会执行任何操作。我已经尝试过类似的实现
ICPTAnimationDelegate
,同样的情况也发生了。
space.XRange = new CPTPlotRange (new NSDecimalNumber (newXMin.ToString ()).NSDecimalValue, 
                         new NSDecimalNumber (newXMax.ToString ()).NSDecimalValue);
        var startRange = new CPTPlotRange (new NSDecimalNumber (0.ToString ()).NSDecimalValue,
                                           new NSDecimalNumber (0.ToString ()).NSDecimalValue);

        cptDelegate = new CptDelegate ();

        CPTAnimation.Animate (space, "XRange", new CPTAnimationPeriod (startRange, space.XRange, 2f, 0f), CPTAnimationCurve.Linear,
                              cptDelegate);