在iOS视图中旋转OxyPlot 90度

时间:2016-02-04 16:18:06

标签: ios xamarin oxyplot

我已经尝试了其他地方可以找到的所有内容,并且我也尝试了下面可以看到的代码的每个排列,我只是无法解决这个问题。

情节本身效果很好,那里没有问题。我的应用程序中有一个屏幕,我想在此视图上绘制一个OxyPlot,但旋转90度以更好地适应数据(由于各种原因,应用程序当前锁定为肖像)。

视图中的代码是:

private void CreatePlotChart()
{
    var normalRect = new CGRect(0,0, View.Frame.Width, View.Frame.Height);
    var rotatedRect = new CGRect(0, 0, View.Frame.Height, View.Frame.Width); // height and width swapped

    var plot = new PlotView();

    var radians = -90d.ToRadians();

    plot.Transform = CGAffineTransform.MakeRotation((nfloat)radians);
    // plot.Frame = normalRect;
    plot.Model = ViewModel.Model;
    // plot.InvalidatePlot(true); // no discernable effect
    Add(plot);

    // plot.Draw(rotatedRect); // context error

    View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

    View.AddConstraints(
        plot.AtTopOf(View),
        plot.AtLeftOf(View),
        plot.WithSameHeight(View),
        plot.WithSameWidth(View),
        plot.AtBottomOf(View)
        );
}

上面的代码会产生如下所示的图表,如果我将rotatedRect传递给构造函数new PlotView(rotatedRect),我也会得到完全相同的图表:

enter image description here

如果我删除约束的使用并传递rotatedRect,就像这样:

private void CreatePlotChart()
{
    var normalRect = new CGRect(0,0, View.Frame.Width, View.Frame.Height);
    var rotatedRect = new CGRect(0, 0, View.Frame.Height, View.Frame.Width); // height and width swapped

    var plot = new PlotView(rotatedRect);

    var radians = -90d.ToRadians();

    plot.Transform = CGAffineTransform.MakeRotation((nfloat)radians);
    // plot.Frame = normalRect;
    plot.Model = ViewModel.Model;
    // plot.InvalidatePlot(true); // no discernable effect
    Add(plot);

    // plot.Draw(rotatedRect); // context error

    // View.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

    //View.AddConstraints(
    //    plot.AtTopOf(View),
    //    plot.AtLeftOf(View),
    //    plot.WithSameHeight(View),
    //    plot.WithSameWidth(View),
    //    plot.AtBottomOf(View)
    //    );
}

我更接近期望的效果,如下所示:

enter image description here

如果我再迈出一步并将其“重置”到缓存的normalRect框架,我会更加接近:

enter image description here

所有这些尝试都让人觉得太过苛刻。实现我需要的图表操作的最佳方法是什么,并保持使用约束以确保正确定位?

更新

如果在绘制第一个图表并开始另一个数据选择之后,完全相同的代码会完全正确地呈现图表:

enter image description here

这也是100%可重复的,所以我认为这可能是OxyPlot中的一个错误,或者是我使用它的方式的一些奇怪的副作用。

0 个答案:

没有答案