我在我的应用程序中运行以下代码,以阻止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的代码没有区别。 : - /
答案 0 :(得分:2)
您的代理人阻止对yRange
进行任何更改。在设置初始yRange
。
plotSpace2.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)
length:CPTDecimalFromFloat(9)];
plotSpace2.delegate = self;
此行为在1.4版中已更改。在以前的版本中,仅在缩放时调用-plotSpace:willChangePlotRangeTo:forCoordinate:
。现在,只要情节范围发生变化,就会调用它。