在核心情节中,我如何让我的轴浮动?

时间:2010-09-07 04:52:31

标签: objective-c core-plot

我尝试将isFloatingAxis设置为YES,但它只会让我的轴消失。我的轴设置如下:

CPXYAxisSet *axisSetKin = (CPXYAxisSet *)kinematicsGraph.axisSet;
CPXYAxis *xKin = axisSetKin.xAxis;
[xKin setIsFloatingAxis:YES];
xKin.labelingPolicy = CPAxisLabelingPolicyAutomatic;
xKin.orthogonalCoordinateDecimal = CPDecimalFromString(@"0");
xKin.minorTicksPerInterval = 4;
xKin.preferredNumberOfMajorTicks = 9;
xKin.majorGridLineStyle = majorGridLineStyleKin;
xKin.minorGridLineStyle = minorGridLineStyleKin;
xKin.labelOffset = 10.0;
xKin.title = @"Lab Angle";
xKin.titleOffset = 30.0;
xKin.titleLocation = CPDecimalFromString(@"2.7");

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

我也一直在使用演示应用程序来获取我需要的图表。使用CPTestApp-Iphone作为基础我开始使用CPTestAppScatterPlotController.m

首先我做了:

y.isFloatingAxis = YES;
x.isFloatAxis = YES;

点击“Run”后,它似乎消失了,但如果仔细观察它们仍然存在。在屏幕的左侧和底部有刻度线,很难看到。

要查看标签,我们需要添加一些额外的填充。注意CPTestAppScatterPlotController.m的顶部我们为图形本身设置了一些填充:

graph.paddingLeft = 10.0;
graph.paddingTop = 10.0;
graph.paddingRight = 10.0;
graph.paddingBottom = 10.0;

如果我们添加:

graph.plotAreaFrame.paddingLeft = 30.0;
graph.plotAreaFrame.paddingBottom = 30.0;

可以让标签出现。

答案 1 :(得分:2)

https://github.com/djw/core-plot/tree/9282845bddbb8c40ff314bbfa158beff797c91f7/examples

这表明isFloatingAxis属性已从至少0.9版本中删除。

我发现问题108也解决了这个问题,并提供了一个查看CorePlot如何处理变更的地方:http://code.google.com/p/core-plot/issues/detail?id=108

浮动轴的新方法似乎是设置其约束:

x.axisConstraints = [CPTConstraints constraintWithUpperOffset:132];

答案 2 :(得分:1)

好吧,看起来有约束是关键。所以我应该

CPConstraints y2Constraints = {CPConstraintFixed, CPConstraintFixed};
    yKin.isFloatingAxis = YES;
    yKin.constraints = y2Constraints;

也在那里。如果你使用CPConstraintNone代替,那么当你调整它所在的视图时,轴实际上会移动,直到程序第一次启动时它看起来根本不存在。固定保持到位。现在想弄清楚如何定位......

哦,还有一点需要知道:当设置为浮动时,轴可以显示在正常绘图空间之外。您可以通过修改原点来精确调整位置,例如

    xKin.orthogonalCoordinateDecimal = CPDecimalFromString(@"0.5");

我不确定这些单位到底是什么,所以你可能不得不玩这些数字来找到你想要的那个。

如果您希望轴显示在绘图的底部和左侧,并保持在那里,您还有一件事要做。因为您将位置设置为0,使用上面的.orthogonalCoordinateDecimal技巧,它们实际上将显示在绘图空间之外,因此似乎已消失。当我第一次设置setIsFloatingAxis:YES时,我的程序就是这种情况。要解决此问题,您必须向plotAreaFrame添加一些填充。请注意,这与CPTestApp主要部分中的填充不同,后者为[graph setPaddingLeft:0]; 相反,请使用graph.plotAreaFrame.paddingTop = 20.0;(或等效地,[[graph plotAreaFrame] setPaddingTop: 20.0];

可以在CPTestApp的AxisDemoController.m中找到完整的示例。

所以我想我在这里回答了我自己的问题?