2010-06-17 2 views
0

Я почти закончил с графиком основного графика, над которым я работал уже пару дней. Есть что-то, что я все еще не могу сделать (и я не могу найти документацию по этому вопросу), - это изменить метки оси x на то, что мне нужно. Сегодня у меня есть ось x с целочисленной меткой, отображаемой каждые 5 значений: «5 10 15 ...», мне нужно иметь метки, соответствующие последним 24 часам. Например, если это 15:00, мне нужны такие метки, как: «15 16 17 ... 23 0 1 2 .. 15« Я думал об использовании NSArray для этого и передал его в plotSpace.xRange, но я не знаете, если это хороший способ сделать это. Вот мой код:iphone, используя массив для определения в диапазоне основного участка

  CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace; 
      plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-15) 
                  length:CPDecimalFromFloat(xmax + 15)]; 
      plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-1000) 
                  length:CPDecimalFromFloat(4300)]; 


      // Setup axis 
      CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet; 
      CPLineStyle *lineStyle = [CPLineStyle lineStyle]; 
      lineStyle.lineColor = [CPColor whiteColor]; 
      lineStyle.lineWidth = 1.0f; 
      CPTextStyle *cyanStyle = [CPTextStyle textStyle]; 
      cyanStyle.color = [CPColor cyanColor]; 
      NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
      [formatter setMaximumFractionDigits:0]; 

      axisSet.xAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"5"] decimalValue]; 
      axisSet.xAxis.minorTicksPerInterval = 0; 
      axisSet.xAxis.majorTickLineStyle = lineStyle; 
      axisSet.xAxis.minorTickLineStyle = lineStyle; 
      axisSet.xAxis.axisLineStyle = lineStyle; 
      axisSet.xAxis.majorTickLength = 5.0f; 
      axisSet.xAxis.labelOffset = 3.0f; 
      axisSet.xAxis.labelExclusionRanges = [NSArray arrayWithObjects: 
             [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-15) 
                    length:CPDecimalFromFloat(15)], 
             nil]; 
      axisSet.xAxis.visibleRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromInteger(0) length:CPDecimalFromInteger(xmax)]; 
      axisSet.xAxis.labelFormatter = formatter; 
      axisSet.xAxis.title = @"Hour"; 
      axisSet.xAxis.titleOffset = 25.0f; 
      axisSet.xAxis.titleLocation = CPDecimalFromFloat(25.0f); 
      axisSet.xAxis.titleTextStyle = cyanStyle; 

Любая помощь будет действительно приветствовать :) Большое спасибо, Люк

ответ

0

я, наконец, нашел решение, используя пользовательские метки:

  NSArray *customTickLocations = [NSArray arrayWithObjects:[NSDecimalNumber numberWithInt:0], 
                    [NSDecimalNumber numberWithInt:5], 
                    [NSDecimalNumber numberWithInt:10], 
                    [NSDecimalNumber numberWithInt:15], 
                    [NSDecimalNumber numberWithInt:20], 
                    [NSDecimalNumber numberWithInt:25], 
                    [NSDecimalNumber numberWithInt:30], 
                    [NSDecimalNumber numberWithInt:35],             
                    [NSDecimalNumber numberWithInt:40],             
                    nil]; 
      NSArray *xAxisLabels = [NSArray arrayWithObjects:@"15",@"18",@"21",@"0",@"3",@"6",@"9",@"12",@"15",nil]; 

      NSUInteger labelLocation = 0; 
      NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:[xAxisLabels count]]; 
      for (NSNumber *tickLocation in customTickLocations) { 
       CPAxisLabel *newLabel = [[CPAxisLabel alloc] initWithText: [xAxisLabels objectAtIndex:labelLocation++] textStyle:axisSet.xAxis.labelTextStyle]; 
       newLabel.tickLocation = [tickLocation decimalValue]; 
       newLabel.offset = axisSet.xAxis.labelOffset + axisSet.xAxis.majorTickLength; 
       [customLabels addObject:newLabel]; 
       [newLabel release]; 
      } 

      axisSet.xAxis.axisLabels = [NSSet setWithArray:customLabels]; 

Еще есть кое-что, чтобы уточнить, но это, безусловно, способ пойти :) Luc

Смежные вопросы