iphone, используя массив для определения в диапазоне основного графика - PullRequest
0 голосов
/ 17 июня 2010

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

            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;

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

1 Ответ

0 голосов
/ 17 июня 2010

Я наконец-то нашел решение с помощью пользовательской метки:

            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];

Еще есть кое-что прояснить, но это, безусловно, путь :) Люк

...