2

我在我的应用程序中运行了以下代码,以阻止在触摸或捏合手势期间缩放 y 轴。我已经分配了axisConstraints,globalXRange和Y也是如此。

-(CGPoint)plotSpace:(CPTPlotSpace *)space willChangePlotRangeTo:(CGPoint)displacement{
return CGPointMake(displacement.x,0);
}

-(CPTPlotRange *)plotSpace:(CPTPlotSpace *)space
 willChangePlotRangeTo:(CPTPlotRange *)newRange
         forCoordinate:(CPTCoordinate)coordinate{
if (coordinate == CPTCoordinateY)
{
    newRange = ((CPTXYPlotSpace*)space).yRange;
}
NSLog(@"Plot changes %@", newRange);
return newRange;
}

我的问题是,从日志中,第一次运行应用程序时页面首次显示时,日志中记录了 4-5 个绘图更改?代码似乎工作正常,只是我没有得到任何情节,加上 Y 上没有标签 + 刻度。

2013-11-10 17:30:52.259 MyApp[8953:a0b] Pinch changes <<CPTPlotRange: 0x8d96680> {0, 30158.4}>
2013-11-10 17:30:52.260 MyApp[8953:a0b] Pinch changes <<CPTPlotRange: 0x8d94e70> {0, 40}>
2013-11-10 17:30:52.260 MyApp[8953:a0b] Pinch changes <<CPTPlotRange: 0x8d94330> {0, 34.44}>
2013-11-10 17:30:52.268 MyApp[8953:a0b] Pinch changes <<CPTPlotRange: 0x8da6da0> {0, 30158}>
2013-11-10 17:30:52.268 MyApp[8953:a0b] Pinch changes <<CPTPlotRange: 0x8da80e0> {0, 9}>

编辑:

我在插入 NSLOG 时做了一些处理,下面的代码是创建手势的原因:

CPTXYPlotSpace *plotSpace2 = (CPTXYPlotSpace *) graph2.defaultPlotSpace;
plotSpace2.allowsUserInteraction = YES;
plotSpace2.delegate = self;
plotSpace2.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromInteger([difference integerValue]*1.03)];
plotSpace2.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromFloat(9)];
plotSpace2.globalXRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromInteger([difference integerValue]*1.03)];
plotSpace2.globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromFloat(9)];

所以有 plotspace.delegate=self 是原因,改为 x.delegate=self 并解决了我看到的手势问题。

不幸的是,我只缩放 x 的代码没有任何区别。:-/

4

1 回答 1

2

您的代表正在阻止对yRange. 设置初始. _yRange

plotSpace2.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)
                                                 length:CPTDecimalFromFloat(9)];
plotSpace2.delegate = self;

此行为在 1.4 版中发生了变化。在以前的版本中,-plotSpace:willChangePlotRangeTo:forCoordinate:仅在缩放时调用。现在,只要绘图范围发生变化,就会调用它。

于 2013-11-11T01:42:17.703 回答