我有以下CorePlot(v1.2)代碼,它基於http://www.raywenderlich.com/13271/how-to-draw-graphs-with-core-plot-part-2的教程,但擴展了一下。約30個數據點需要約3秒才能在iPhone 4S上呈現圖形。該圖確實加載,它只是緩慢。無論如何改善表現?CorePlot性能下降
這裏的輸出的NSLog形成的代碼:
2013-05-30 17:41:20.386 myApp[2796:907] A
2013-05-30 17:41:20.387 myApp[2796:907] B
2013-05-30 17:41:20.388 myApp[2796:907] C
2013-05-30 17:41:20.389 myApp[2796:907] D
2013-05-30 17:41:21.158 myApp[2796:907] E
2013-05-30 17:41:21.160 myApp[2796:907] F
2013-05-30 17:41:22.594 myApp[2796:907] G
NB的代碼完成運行有圖形呈現之前關於另一0.5秒的延時之後。
,代碼:
-(void)configureAxes {
NSLog(@"A");
// 1 - Create styles
CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle];
axisTitleStyle.color = [CPTColor whiteColor];
axisTitleStyle.fontName = @"Helvetica-Bold";
axisTitleStyle.fontSize = 12.0f;
CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle];
axisLineStyle.lineWidth = 2.0f;
axisLineStyle.lineColor = [CPTColor whiteColor];
CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init];
axisTextStyle.color = [CPTColor whiteColor];
axisTextStyle.fontName = @"Helvetica-Bold";
axisTextStyle.fontSize = 11.0f;
CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle];
tickLineStyle.lineColor = [CPTColor whiteColor];
tickLineStyle.lineWidth = 2.0f;
NSLog(@"B");
// 2 - Get axis set
CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.hostView.hostedGraph.axisSet;
// 3 - Configure x-axis
CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle];
lineStyle.lineColor = [CPTColor whiteColor];
lineStyle.lineWidth = 2.0f;
CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle];
textStyle.fontName = @"Helvetica";
textStyle.fontSize = 14;
textStyle.color = [CPTColor whiteColor];
axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0.0");
axisSet.xAxis.minorTicksPerInterval = 0;
NSLog(@"C");
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
if ([person.unitPreference isEqualToString:@"US"]) {
[dateFormatter setDateFormat:@"MMM-dd"];
} else {
[dateFormatter setDateFormat:@"dd-MMM"];
}
NSLog(@"D");
CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter];
axisSet.xAxis.labelFormatter = timeFormatter;
axisSet.xAxis.labelRotation = M_PI/4;
axisSet.xAxis.titleOffset = 55.5f;
axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
NSLog(@"E");
if ([measurementField isEqualToString:@"mWeight"]) {
NSString *unit;
if ([person.unitPreference isEqualToString:@"METRIC"]) {
unit = @"Kgs";
} else if ([person.unitPreference isEqualToString:@"US"]) {
unit = @"lbs";
} else {
unit = @"st lbs";
}
axisSet.yAxis.title = [NSString stringWithFormat: @"Weight (%@)", unit];
WeightFormatter *weightFormatter = [[WeightFormatter alloc] init];
weightFormatter.person = person;
axisSet.yAxis.labelFormatter = weightFormatter;
} else if ([measurementField isEqualToString:@"mBodyFatPercentage"]) {
axisSet.yAxis.title = @"Body Fat %";
axisSet.yAxis.labelFormatter = [[BodyFatPercentageFormatter alloc] init];
} else {
NSString *unit;
if ([person.unitPreference isEqualToString:@"METRIC"]) {
unit = @"CMs";
} else {
unit = @"Inches";
}
axisSet.yAxis.title = [NSString stringWithFormat: @"Measurements (%@)", unit];
MeasurementFormatter *measurementFormatter = [[MeasurementFormatter alloc] init];
measurementFormatter.person = person;
axisSet.yAxis.labelFormatter = measurementFormatter;
}
NSLog(@"F");
axisSet.yAxis.titleTextStyle = textStyle;
axisSet.yAxis.titleOffset = 40.0f + marginOffset;
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((yAxisMax-yAxisMin)/10.0f);
axisSet.yAxis.minorTicksPerInterval = 1;
axisSet.yAxis.minorTickLength = 5.0f;
axisSet.yAxis.majorTickLength = 7.0f;
axisSet.yAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(yAxisMin);
axisSet.xAxis.majorIntervalLength = CPTDecimalFromFloat(oneDay);
NSLog(@"G");
}
您使用的是什麼版本的Core Plot?圖表最終顯示時圖表是否顯示正確? –
謝謝埃裏克,我在1.2上,並且該圖確實呈現。我實際上最近從1.1升級到1.1,因爲我在iphone 5上遇到了問題。我可能會試着回滾,看看新版本是否引入了性能開銷。我在一段時間之前完成了所有這些代碼,並且不記得當時有任何性能問題,但是我的記憶很脆弱......我必須承認,我認爲它並不是由新版本引起的,但它似乎很合理。 – Lewis42
1.2確實有一個問題,它有時可能會創建很多額外的軸標籤,從而放慢了一切。我沒有看到您發佈的代碼中可能引發問題的任何內容,但仍然有可能。如果您追蹤1.2版本的減速情況,請使用Mercurial獲取最新代碼以獲得修復。 –