2012-02-29 124 views
4

我要让这样一件事:http://youtu.be/PeRhxSCx2xM核心情节禁用轴和y轴缩放,滚动

我尝试实现这个方法:

//viewDidLoad 
//plotSpace.delegate = self; 

- (CPTPlotRange *)plotSpace:(CPTPlotSpace *)space 
    willChangePlotRangeTo:(CPTPlotRange *)newRange 
      forCoordinate:(CPTCoordinate)coordinate { 

    NSLog(@"WillChangePlotRangeTo"); 

    // only allows scrolling to the right 
    // remove this to have scrolling in both directions 
    if (newRange.locationDouble < 0.0F) { 
     newRange.location = CPTDecimalFromFloat(0.0); 
    } 

    // Adjust axis to keep them in view at the left and bottom; 
    // adjust scale-labels to match the scroll. 
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet; 
    if (coordinate == CPTCoordinateX) { 
     axisSet.yAxis.orthogonalCoordinateDecimal = newRange.location; 
     axisSet.xAxis.titleLocation = CPTDecimalFromFloat(newRange.locationDouble + 
                 (newRange.lengthDouble/2.0F)); 
    } else { 
     axisSet.xAxis.orthogonalCoordinateDecimal = newRange.location; 
     axisSet.yAxis.titleLocation = CPTDecimalFromFloat(newRange.locationDouble + 
                 (newRange.lengthDouble/2.0F)); 
    } 

    return newRange; 
} 

,我尝试这,这个解决方案的工作时,我缩小,而不是当我放大工作。

plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1.0) length:CPTDecimalFromFloat(3.0)]; 
plotSpace.globalYRange = plotSpace.yRange; 

谁能请解释我,什么是正确的结果,其工作实际上是如何。

感谢的答复

回答

12

最简单的方法是只忽略newRange和y坐标返回现有yRange。您也不必在此更新轴属性。有更简单的方法来做到这一点。

图形设置:

// leave the titleLocation for both axes at the default (NAN) to center the titles 
xAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0]; 
yAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0]; 

剧情空间委托:

- (CPTPlotRange *)plotSpace:(CPTPlotSpace *)space 
     willChangePlotRangeTo:(CPTPlotRange *)newRange 
       forCoordinate:(CPTCoordinate)coordinate { 

    CPTPlotRange *updatedRange = nil; 

    switch (coordinate) { 
    case CPTCoordinateX: 
     if (newRange.locationDouble < 0.0F) { 
      CPTMutablePlotRange *mutableRange = [[newRange mutableCopy] autorelease]; 
      mutableRange.location = CPTDecimalFromFloat(0.0); 
      updatedRange = mutableRange; 
     } 
     else { 
      updatedRange = newRange; 
     } 
     break; 
    case CPTCoordinateY: 
     updatedRange = ((CPTXYPlotSpace *)space).yRange; 
     break; 
    } 
    return updatedRange; 
} 
+0

完美的答案它的工作,非常感谢你,只有一件事:当我做出一个大的缩小应用程序崩溃与此消息: - [CPTPlotRange mutableCopyWithZone:]:无法识别的选择器发送到实例0xd876030 2012-03-01 07:41:58.676 SSDev [823:11f03] ***由于未捕获异常'NSInvalidArgumentException',原因:' - [CPTPlotRange mutableCopyWithZone :]:无法识别的选择器发送到实例0xd876030' ***第一次抛出调用堆栈: – flatronka 2012-03-01 05:44:22

1

我有类似的情况和问题,它让我抓狂,因为我忘了设定的委托:

plotSpace.delegate = self;