Я использую базовый график для отображения последних показателей сервера на iPhone / iPad.У меня все правильно, и примерно на 95% выгляжу так, как хочу.Единственное, что меня беспокоит, так это то, что Дата и Время отображаются в виде интервала оси x, и я не вижу большого контроля над тем, с какой точки начинается этот интервал.
Например, у меня в настоящее время основной интервал распечатывает дату / время каждые полчаса.Это означает, что я могу распечатать время по оси X следующим образом: 2/8 12:00 pm 2/8 12:30 pm 2/8 13:00 PM Я хотел бы, чтобы источник графика (текущее время) былначало этого интервала (например, 2/8 11:37 2/8 12:07 вечера 2/8 12:37 вечера).Это возможно?Есть ли какая-нибудь точка начала интервала, которую я могу определить?
Вот соответствующий код:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"M/d h:mm a"];
if([[NSTimeZone systemTimeZone] isDaylightSavingTime]) {
NSLog(@"DLS");
}
[NSTimeZone resetSystemTimeZone];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter];
timeFormatter.referenceDate = [NSDate dateWithTimeIntervalSinceReferenceDate:0];
axisSet.xAxis.labelFormatter = timeFormatter;
CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle];
lineStyle.lineColor = [CPTColor whiteColor];
lineStyle.lineWidth = 2.0f;
axisSet.xAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"50"] decimalValue];
axisSet.xAxis.minorTicksPerInterval = 4;
axisSet.xAxis.majorTickLineStyle = lineStyle;
axisSet.xAxis.minorTickLineStyle = lineStyle;
axisSet.xAxis.axisLineStyle = lineStyle;
axisSet.xAxis.minorTickLength = 5.0f;
axisSet.xAxis.majorTickLength = 7.0f;
axisSet.xAxis.labelOffset = 3.0f;
axisSet.yAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"50"] decimalValue];
axisSet.yAxis.minorTicksPerInterval = 4;
axisSet.yAxis.majorTickLineStyle = lineStyle;
axisSet.yAxis.minorTickLineStyle = lineStyle;
axisSet.yAxis.axisLineStyle = lineStyle;
axisSet.yAxis.minorTickLength = 5.0f;
axisSet.yAxis.majorTickLength = 7.0f;
axisSet.yAxis.labelOffset = 3.0f;
CPTScatterPlot *PowerPlot = [[CPTScatterPlot alloc] initWithFrame:self.view.bounds];
PowerPlot.identifier = @"PowerPlot";
CPTMutableLineStyle *PowerLine = [[CPTMutableLineStyle alloc] init];
[PowerLine setLineColor:[CPTColor redColor]];
[PowerLine setLineWidth:1.0f];
[PowerPlot setDataLineStyle:PowerLine];
PowerPlot.dataSource = self;
[MainGraph addPlot:PowerPlot];
CPTPlotSymbol *greenCirclePlotSymbol = [CPTPlotSymbol ellipsePlotSymbol];
greenCirclePlotSymbol.fill = [CPTFill fillWithColor:[CPTColor greenColor]];
greenCirclePlotSymbol.size = CGSizeMake(2.0, 2.0);
PowerPlot.plotSymbol = greenCirclePlotSymbol;
(void)RefreshGraph {
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)MainGraph.defaultPlotSpace;
NSRange YRange = [self getActiveGraphYRange];
NSInteger YIncrement = YRange.length/10;
long TimeInterval = 0;
switch (CurrentPeriod) {
case PERIOD_HOUR:
TimeInterval = OneHour;
break;
case PERIOD_DAY:
TimeInterval = OneDay;
break;
case PERIOD_WEEK:
TimeInterval = OneWeek;
break;
case PERIOD_MONTH:
TimeInterval = OneMonth;
break;
default:
break;
}
long StartTime = [[NSDate date] timeIntervalSinceReferenceDate];
if([DataPoints count] > 0) {
StartTime = [[(DataPoint *)[DataPoints objectAtIndex:0] Timestamp] timeIntervalSinceReferenceDate];
}
NSInteger XIncrement = TimeInterval/10;
NSInteger XMajorIncrement = XIncrement*5;
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)MainGraph.axisSet;
axisSet.xAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d",XMajorIncrement]] decimalValue];
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(StartTime - XIncrement- (XIncrement/3)) length:CPTDecimalFromFloat(TimeInterval + (2*XIncrement))];
}
else{
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(StartTime - XIncrement) length:CPTDecimalFromFloat(TimeInterval + (2*XIncrement))];
}
axisSet.yAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(StartTime - XIncrement/5);
//axisSet.yAxis.
if([TypeControl selectedSegmentIndex] == 0) { //Power
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-40) length:CPTDecimalFromFloat(YRange.length+40)];
axisSet.yAxis.visibleRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromFloat(YRange.length+15)];
axisSet.yAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d",YIncrement]] decimalValue];
}
else{
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-15) length:CPTDecimalFromFloat(YRange.length+15)];
axisSet.yAxis.visibleRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromFloat(YRange.length+15)];
axisSet.yAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d",YIncrement]] decimalValue];
}
axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(0);
} else { //Temp
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
plotSpace.yRange =
[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-4) length:CPTDecimalFromFloat(35)];
axisSet.yAxis.visibleRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromFloat(35)];
axisSet.yAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"4"] decimalValue];
}
else{
plotSpace.yRange =
[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-2) length:CPTDecimalFromFloat(35)];
axisSet.yAxis.visibleRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0) length:CPTDecimalFromFloat(35)];
axisSet.yAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"1"] decimalValue];
}
axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(0);
}
[MainGraph reloadData];
}