I just updated to version 1.1, and right away noticed that my axis labels are not displaying correctly at first, or updating properly.
In 1.0 they would load correctly (when the view first shows), and once a second I update the ranges (CPTPlotRange) and the data (-reloadData) and the axes and the data updated correctly every time. However, now with 1.1, the data and axis tick marks are updating correctly, but the axis labels lag behind. Sometimes I will see the new axis label start in the lower left corner, and over 3 seconds migrate to its correct location. And if the label is already there, it will lag behind the axis tick marks by 1 second or more.
I changed none of my code, only removed the old 1.0 files and replaced them with the 1.1 files. Below is all of the code related to one of the plots.
- (void) prepareGraphs {
//Prepare beat graph
//beatGraph defined as CPTXYGraph
//beatGraphView defined as CPTGraphHostingView in both class and storyboard
beatGraph = [[CPTXYGraph alloc] initWithFrame:self.beatGraphView.frame];
self.beatGraphView.collapsesLayers = NO;
self.beatGraphView.hostedGraph = beatGraph;
beatGraph.paddingLeft = 0.0;
beatGraph.paddingTop = 0.0;
beatGraph.paddingRight = 0.0;
beatGraph.paddingBottom = 0.0;
CPTPlotAreaFrame *beatPlotAreaframe = (CPTPlotAreaFrame *)beatGraph.plotAreaFrame;
beatPlotAreaframe.paddingLeft = 30;
beatPlotAreaframe.paddingRight = 5;
CPTXYPlotSpace *beatPlotSpace = (CPTXYPlotSpace *)beatGraph.defaultPlotSpace;
beatPlotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0)
length:CPTDecimalFromFloat(31)];
beatPlotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(75)
length:CPTDecimalFromFloat(20)];
CPTXYAxisSet *beatPlotAxisSet = (CPTXYAxisSet *)beatGraph.axisSet;
beatPlotAxisSet.xAxis.hidden = TRUE;
beatPlotAxisSet.yAxis.majorIntervalLength = [[NSDecimalNumber decimalNumberWithString:@"10"] decimalValue];
beatPlotAxisSet.yAxis.minorTicksPerInterval = 4;
beatPlotAxisSet.yAxis.majorTickLineStyle = lineStyleThick;
beatPlotAxisSet.yAxis.minorTickLineStyle = lineStyleThin;
beatPlotAxisSet.yAxis.axisLineStyle = lineStyleThick;
beatPlotAxisSet.yAxis.minorTickLength = 4.0f;
beatPlotAxisSet.yAxis.majorTickLength = 5.0f;
beatPlotAxisSet.yAxis.labelOffset = 0.0f;
beatPlotAxisSet.yAxis.labelFormatter = integerLabelFormat;
//beat plot
//beatPlot defined as CPTScatterPlot
beatPlot = [[CPTScatterPlot alloc] init];
beatPlot.identifier = @"Beat Plot";
CPTMutableLineStyle *beatPlotLineStyle = [beatPlot.dataLineStyle mutableCopy];
beatPlotLineStyle.lineWidth = 1.0f;
beatPlotLineStyle.lineColor = [CPTColor redColor];
beatPlot.dataLineStyle = beatPlotLineStyle;
CPTPlotSymbol *beatPlotSymbol = [CPTPlotSymbol ellipsePlotSymbol];
beatPlotSymbol.fill = [CPTFill fillWithColor:[CPTColor greenColor]];
beatPlotSymbol.size = CGSizeMake(5.0, 5.0);
beatPlot.plotSymbol = beatPlotSymbol;
beatPlot.cachePrecision = CPTPlotCachePrecisionDouble;
[beatGraph addPlot:beatPlot];
}
- (void)updateGraphs {
//Get the cached arrays for the beat and spectrum plots
[self.currentRecord getBeatArraysForSeconds:30 beats:&beatsForBeatPlot xArray:beatXArray yArray:beatYArray];
//Set beat graph y-axis
CPTXYPlotSpace *beatPlotSpace = (CPTXYPlotSpace *)beatGraph.defaultPlotSpace;
double minbpm;
double maxbpm;
vDSP_maxvD(beatYArray, 1, &maxbpm, beatsForBeatPlot);
vDSP_minvD(beatYArray, 1, &minbpm, beatsForBeatPlot);
maxbpm*=1.01;
minbpm*=0.99;
beatPlotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(minbpm)
length:CPTDecimalFromDouble(maxbpm-minbpm)];
//reloaddata
[beatGraph reloadData];
}
Here are two screen shots both taken right after viewDidAppear, before any data has been plotted. Any help would be greatly appreciated.


Additional Information
While running the code with version 1.1 inside Instruments, I found that the axes will eventually correct themselves. The last thing to run in my code is the viewDidLoad. In this test case I never call -reloadData (it doesn’t make a difference if I do anyways), and nothing else happens once the view is loaded. However, after 15 to 40 seconds (it varies run to run), the axes fix themselves and Instruments shows a few additional calls. Most of it looks like system calls, but there is one call to -[CPTAnnotationHostLayer sublayersExcludedFromAutomaticLayout] and below that -[__NSPlaceholderSet initWithObjects:count:]. However, neither of these are in my code, so I can’t seem to trace where they were called from, or why so late, or why randomly.
This sounds like a Core Plot bug. Please report it on the Core Plot issue tracker.