コア プロットを使用してグラフを描画しています。これまでのところ、これは優れたフレームワークのようですが、ユーザー インタラクションを有効にしてスクロールを実行すると、いくつかのパフォーマンスの問題が発生しました。
最初は、これはプロットされているポイントの数が原因だと思っていたので、ポイントが非常に少ない簡単なテスト アプリを作成しました。プロットが可能な限り単純であるにもかかわらず、スクロールはまだ非常にぎくしゃくしていました。このプロットでは、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];
}