我正在使用核心繪圖繪製圖形。到目前爲止,它似乎是一個很好的框架,但是當我啓用用戶交互並執行滾動時,我遇到了一些性能問題。CorePlot ScatterPlot滾動性能iPhone4
起初我以爲這是由於被繪製點的數量所以我寫了一個簡單的測試應用程序,只有很少的幾點。儘管情節儘可能簡單,但滾動仍然很不平穩。在這個情節下,我在iPhone 4上獲得20-25 fps的速度。
我做錯了什麼,或者這和核心情節一樣快嗎?
我的樣本代碼如下:
- (void)viewDidLoad
{
[super viewDidLoad];
graph = [(CPTXYGraph *)[CPTXYGraph alloc] initWithFrame:CGRectZero];
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0) length: CPTDecimalFromDouble(5)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0) length:CPTDecimalFromDouble(5)];
plotSpace.allowsUserInteraction = YES;
plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(-10) length:CPTDecimalFromDouble(100)];
plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(-10) length:CPTDecimalFromDouble(20)];
// Axes
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
CPTXYAxis *x = axisSet.xAxis;
x.majorIntervalLength = CPTDecimalFromInt(1);
x.orthogonalCoordinateDecimal = CPTDecimalFromInt(0);
x.axisConstraints = [CPTConstraints constraintWithLowerOffset:30];
CPTXYAxis *y = axisSet.yAxis;
y.majorIntervalLength = CPTDecimalFromInt(1);
y.minorTicksPerInterval = 0;
y.orthogonalCoordinateDecimal = CPTDecimalFromDouble(0);
y.axisConstraints = [CPTConstraints constraintWithLowerOffset:30];
// Create a plot that uses the data source method
CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init];
dataSourceLinePlot.identifier = @"1";
CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy];
lineStyle.lineWidth = 3.f;
lineStyle.lineColor = [CPTColor redColor];
dataSourceLinePlot.dataLineStyle = lineStyle;
dataSourceLinePlot.dataSource = self;
dataSourceLinePlot.delegate = self;
[graph addPlot:dataSourceLinePlot];
hostView.hostedGraph = graph;
}
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot
{
return 20;
}
-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
return [NSNumber numberWithInt:index];
}
當第一次加載圖時,圖委託最初被調用。它不會在每次後續重新加載或用戶交互時調用。當滾動發生時,我相信CorePlot框架所做的唯一事情就是渲染。我並沒有真正做任何背景任務,因爲它是所有渲染相關的,所以我不認爲你的建議適用於此,但如果我錯了,請糾正我。 – Imran 2012-07-23 16:40:48
您可能還需要將圖形移至背景。什麼樣的viewController持有這些陰謀? ScrollView,TableView或? – jdog 2012-07-23 18:15:14
另外你最好打賭是使用時間分析器查看什麼是尖峯。 – jdog 2012-07-23 18:17:00