Note that there are some explanatory texts on larger screens.

plurals
  1. POflickering iOS core plot Graph
    primarykey
    data
    text
    <p>I have a case where my app connects to the server to get data and plot on the graph. When the function to initialise the plot is called, the graph is redrawn at a wrong place and auto corrects itself back where it is supposed to be. This causes a flickering in the process. I have a rised a timer for every 10 seconds to connect to the server. Below is the plot initialization code.</p> <pre><code> -(id)initWithHostingView:(CPTGraphHostingView *)hostingView andData:(NSMutableArray *)data { self = [super init]; if ( self != nil ) { self.hostingView = hostingView; self.graphData = data; self.graph = nil; } return self; } </code></pre> <p>// This does the actual work of creating the plot if we don't already have a graph object.</p> <pre><code> -(void)initialisePlot:(NSUInteger)indexOfPlot { // Start with some simple sanity checks before we kick off if ( (self.hostingView == nil) || (self.graphData == nil) ) { NSLog(@"TUTSimpleScatterPlot: Cannot initialise plot without hosting view or data."); return; } if ( self.graph != nil ) { NSLog(@"TUTSimpleScatterPlot: Graph object already exists."); return; } // Create a graph object which we will use to host just one scatter plot. CGRect frame; //CGRect frame = [self.hostingView bounds]; if(indexOfPlot == 0){ self.graph = [[CPTXYGraph alloc] initWithFrame:frame]; // Add some padding to the graph, with more at the bottom for axis labels. self.graph.plotAreaFrame.paddingTop = 500.0f; self.graph.plotAreaFrame.paddingRight = 20.0f; self.graph.plotAreaFrame.paddingBottom = 50.0f; self.graph.plotAreaFrame.paddingLeft= 20.0f; // Tie the graph we've created with the hosting view. self.hostingView.hostedGraph = self.graph; // If you want to use one of the default themes - apply that here. [self.graph applyTheme:[CPTTheme themeNamed:kCPTPlainWhiteTheme]]; // Create a line style that we will apply to the axis and data line. CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; lineStyle.lineColor = [CPTColor redColor]; lineStyle.lineWidth = 2.0f; // Create a text style that we will use for the axis labels. CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; textStyle.fontName = @"Helvetica"; textStyle.fontSize = 14; textStyle.color = [CPTColor blackColor]; // Create the plot symbol we're going to use. CPTPlotSymbol *plotSymbol = [CPTPlotSymbol ellipsePlotSymbol]; plotSymbol.lineStyle = lineStyle; plotSymbol.size = CGSizeMake(8.0, 8.0); // Setup some floats that represent the min/max values on our axis. float xAxisMin = -10; float xAxisMax = 10; float yAxisMin = 0; float yAxisMax = 100; // We modify the graph's plot space to setup the axis' min / max values. CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromFloat(xAxisMax - xAxisMin)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromFloat(yAxisMax - yAxisMin)]; // Modify the graph's axis with a label, line style, etc. CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet; axisSet.xAxis.title = @"Data X"; axisSet.xAxis.titleTextStyle = textStyle; axisSet.xAxis.titleOffset = 30.0f; axisSet.xAxis.axisLineStyle = lineStyle; axisSet.xAxis.majorTickLineStyle = lineStyle; axisSet.xAxis.minorTickLineStyle = lineStyle; axisSet.xAxis.labelTextStyle = textStyle; axisSet.xAxis.labelOffset = 3.0f; axisSet.xAxis.majorIntervalLength = CPTDecimalFromFloat(2.0f); axisSet.xAxis.minorTicksPerInterval = 1; axisSet.xAxis.minorTickLength = 5.0f; axisSet.xAxis.majorTickLength = 7.0f; axisSet.yAxis.title = @"Data Y"; axisSet.yAxis.titleTextStyle = textStyle; axisSet.yAxis.titleOffset = 40.0f; axisSet.yAxis.axisLineStyle = lineStyle; axisSet.yAxis.majorTickLineStyle = lineStyle; axisSet.yAxis.minorTickLineStyle = lineStyle; axisSet.yAxis.labelTextStyle = textStyle; axisSet.yAxis.labelOffset = 3.0f; axisSet.yAxis.majorIntervalLength = CPTDecimalFromFloat(10.0f); axisSet.yAxis.minorTicksPerInterval = 1; axisSet.yAxis.minorTickLength = 5.0f; axisSet.yAxis.majorTickLength = 7.0f; // Add a plot to our graph and axis. We give it an identifier so that we // could add multiple plots (data lines) to the same graph if necessary. CPTScatterPlot *plot = [[CPTScatterPlot alloc] init]; plot.dataSource = self; plot.identifier = @"mainplot"; plot.dataLineStyle = lineStyle; plot.plotSymbol = plotSymbol; //[self.graph reloadData]; [self.graph addPlot:plot]; } if(indexOfPlot == 1){ self.graph = [[CPTXYGraph alloc] initWithFrame:frame]; // Add some padding to the graph, with more at the bottom for axis labels. self.graph.plotAreaFrame.paddingTop = 20.0f; self.graph.plotAreaFrame.paddingRight = 20.0f; self.graph.plotAreaFrame.paddingBottom = 600.0f; self.graph.plotAreaFrame.paddingLeft= 20.0f; // Tie the graph we've created with the hosting view. self.hostingView.hostedGraph = self.graph; // If you want to use one of the default themes - apply that here. [self.graph applyTheme:[CPTTheme themeNamed:kCPTPlainWhiteTheme]]; // Create a line style that we will apply to the axis and data line. CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle]; lineStyle.lineColor = [CPTColor redColor]; lineStyle.lineWidth = 2.0f; // Create a text style that we will use for the axis labels. CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle]; textStyle.fontName = @"Helvetica"; textStyle.fontSize = 14; textStyle.color = [CPTColor blackColor]; // Create the plot symbol we're going to use. CPTPlotSymbol *plotSymbol = [CPTPlotSymbol crossPlotSymbol]; plotSymbol.lineStyle = lineStyle; plotSymbol.size = CGSizeMake(8.0, 8.0); // Setup some floats that represent the min/max values on our axis. float xAxisMin = -10; float xAxisMax = 10; float yAxisMin = 0; float yAxisMax = 100; // We modify the graph's plot space to setup the axis' min / max values. CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)self.graph.defaultPlotSpace; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromFloat(xAxisMax - xAxisMin)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromFloat(yAxisMax - yAxisMin)]; // Modify the graph's axis with a label, line style, etc. CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet; axisSet.xAxis.title = @"Data X"; axisSet.xAxis.titleTextStyle = textStyle; axisSet.xAxis.titleOffset = 30.0f; axisSet.xAxis.axisLineStyle = lineStyle; axisSet.xAxis.majorTickLineStyle = lineStyle; axisSet.xAxis.minorTickLineStyle = lineStyle; axisSet.xAxis.labelTextStyle = textStyle; axisSet.xAxis.labelOffset = 3.0f; axisSet.xAxis.majorIntervalLength = CPTDecimalFromFloat(2.0f); axisSet.xAxis.minorTicksPerInterval = 1; axisSet.xAxis.minorTickLength = 5.0f; axisSet.xAxis.majorTickLength = 7.0f; axisSet.yAxis.title = @"Data Y"; axisSet.yAxis.titleTextStyle = textStyle; axisSet.yAxis.titleOffset = 40.0f; axisSet.yAxis.axisLineStyle = lineStyle; axisSet.yAxis.majorTickLineStyle = lineStyle; axisSet.yAxis.minorTickLineStyle = lineStyle; axisSet.yAxis.labelTextStyle = textStyle; axisSet.yAxis.labelOffset = 3.0f; axisSet.yAxis.majorIntervalLength = CPTDecimalFromFloat(10.0f); axisSet.yAxis.minorTicksPerInterval = 1; axisSet.yAxis.minorTickLength = 5.0f; axisSet.yAxis.majorTickLength = 7.0f; // Add a plot to our graph and axis. We give it an identifier so that we // could add multiple plots (data lines) to the same graph if necessary. CPTScatterPlot *plot = [[CPTScatterPlot alloc] init]; plot.dataSource = self; plot.identifier = @"mainplot"; plot.dataLineStyle = lineStyle; plot.plotSymbol = plotSymbol; //[self.graph reloadData]; [self.graph addPlot:plot]; } } </code></pre> <p>Do i have to reconsider the way it is being initialised?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload