2012-02-29 103 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;