2014-03-04 52 views
3

我採取的條形圖和我有理解這兩個方法numberForPlot:field:recordIndex:numberOfRecordsForPlot理解numberForPlot:和numberOfRecordsForPlot:核心情節

問題,我目前有

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot 
{ 
    return 4; 
} 

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx { 
    switch (idx) { 
     case 0: 
      return @1; 
      break; 
     case 1: 
      return @2; 
      break; 
     case 2: 
      return @3; 
      break; 
     case 3: 
      return @4; 
      break; 
     default: 
      return @0; 
      break; 
    } 
} 

這使得圖形預期。當我改變@4@5時,它顯示最後一個帶有空欄空間的欄。如果我根據numberOfRecordsForPlot爲4個條目中的每一個繪製x和y位置,但在numberForPlot中記錄信息時,這對fieldEnum只有0 & 1是有意義的。

我已經看過了doco和例子,對我來說沒有更清楚。有人能解釋一下嗎?

回答

4

主要問題是該委託方法的fieldEnum沒有按照您的想法進行。它將具有值CPTBarPlotFieldBarLocation('x'軸位置)或CPTBarPlotFieldBarTip(條高),因此這些應該是switch語句中使用的情況。 idx指的是特定的欄。

這裏我已經把條的高度放在數據源對象的一個​​屬性plotData中。

self.plotData = @[@(1), @(2), @(3), @(4)]; 

然後你就可以實現這樣的委託方法,

-(NSNumber*) numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx { 

    switch (fieldEnum) { 
     case CPTBarPlotFieldBarLocation: 
      return @(idx); 
      break; 

     case CPTBarPlotFieldBarTip: 
      return [plotData objectAtIndex:idx]; 
      break; 

     default: 
      break; 
    } 

    return nil; 
}