Core-Plot iOS - 仅在每隔一个图表显示时将多个图表添加到屏幕

时间:2012-04-10 10:06:01

标签: ios core-plot

我有一个带有6个UIViews的父视图,我在其中添加了我的核心图表(这样工作正常,但由于某种原因只显示每一个图表!)

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
if(!chartVC1){
    chartVC1 = [[ChartVC alloc] initWithIdentifier:@"plot1"];
    //[chartVC1 setKPlotIdentifier:@"plot1"];
    [chartVC1.view setFrame:self.Panel1.frame];
}
[self.Panel1 addSubview:chartVC1.view];

if(!chartVC3){
    chartVC3 = [[ChartVC alloc] initWithIdentifier:@"plot2"];
    [chartVC3.view setFrame:self.Panel3.frame];
}
[self.Panel3 addSubview:chartVC3.view];

if(!chartVC2){
    chartVC2 = [[ChartVC alloc] initWithIdentifier:@"plot3"];
    [chartVC2.view setFrame:self.Panel2.frame];
}

[self.Panel2 addSubview:chartVC2.view];

if(!chartVC4){
    chartVC4 =  [[ChartVC alloc] initWithIdentifier:@"plot4"];
    [chartVC4.view setFrame:self.Panel4.frame];
}
[self.Panel4 addSubview:chartVC4.view];

if(!chartVC5){
    chartVC5 =  [[ChartVC alloc] initWithIdentifier:@"plot5"];
    [chartVC5.view setFrame:self.Panel5.frame];

}
[self.Panel5 addSubview:chartVC5.view];

if(!chartVC6){
    chartVC6 = [[ChartVC alloc] initWithIdentifier:@"plot6"];
    [chartVC6.view setFrame:self.Panel6.frame];
}
[self.Panel6 addSubview:chartVC6.view];
}

以下是ChartVC类的一些代码

- (无效)renderInLayer {     CPTXYGraph * graph = [[[CPTXYGraph alloc] initWithFrame:self.view.bounds] autorelease];

[self addGraph:graph toHostingView:self.view];
[self applyTheme:nil toGraph:graph withDefault:[CPTTheme themeNamed:kCPTDarkGradientTheme]];

//[self setTitleDefaultsForGraph:graph withBounds:self.view.bounds];
//[self setPaddingDefaultsForGraph:graph withBounds:self.view.bounds];

graph.plotAreaFrame.paddingTop    = -20.0;
 graph.plotAreaFrame.paddingRight  = -20.0;
 graph.plotAreaFrame.paddingBottom = -20.0;
 graph.plotAreaFrame.paddingLeft      = -20.0;

graph.plotAreaFrame.plotArea.frame = self.view.bounds;

graph.backgroundColor = [[UIColor whiteColor] CGColor];
// Grid line styles
CPTMutableLineStyle *majorGridLineStyle = [CPTMutableLineStyle lineStyle];
majorGridLineStyle.lineWidth = 0.75;
majorGridLineStyle.lineColor = [[CPTColor colorWithGenericGray:0.2] colorWithAlphaComponent:0.75];

CPTMutableLineStyle *minorGridLineStyle = [CPTMutableLineStyle lineStyle];
minorGridLineStyle.lineWidth = 0.25;
minorGridLineStyle.lineColor = [[CPTColor whiteColor] colorWithAlphaComponent:0.1];

// Axes
// X axis
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
CPTXYAxis *x          = axisSet.xAxis;
x.labelingPolicy              = CPTAxisLabelingPolicyAutomatic;
x.orthogonalCoordinateDecimal = CPTDecimalFromUnsignedInteger(0);
x.majorGridLineStyle          = majorGridLineStyle;
x.minorGridLineStyle          = minorGridLineStyle;
x.minorTicksPerInterval       = 9;
//x.title                         = @"X Axis";
//x.titleOffset               = 35.0;
NSNumberFormatter *labelFormatter = [[NSNumberFormatter alloc] init];
labelFormatter.numberStyle = NSNumberFormatterNoStyle;
x.labelFormatter           = labelFormatter;
[labelFormatter release];

// Y axis
CPTXYAxis *y = axisSet.yAxis;
y.labelingPolicy              = CPTAxisLabelingPolicyAutomatic;
y.orthogonalCoordinateDecimal = CPTDecimalFromUnsignedInteger(0);
y.majorGridLineStyle          = majorGridLineStyle;
y.minorGridLineStyle          = minorGridLineStyle;
y.minorTicksPerInterval       = 3;
//y.labelOffset               = 5.0;
//y.title                         = @"Y Axis";
//y.titleOffset               = 30.0;
y.axisConstraints             = [CPTConstraints constraintWithLowerOffset:0.0];

// Rotate the labels by 45 degrees, just to show it can be done.
x.labelRotation = M_PI * 0.25;

// Create the plot
CPTScatterPlot *dataSourceLinePlot1 = [[[CPTScatterPlot alloc] init] autorelease];
dataSourceLinePlot1.identifier    = [self kPlotIdentifier];
//NSLog(@"set identifier: %@", [self kPlotIdentifier]);
dataSourceLinePlot1.cachePrecision = CPTPlotCachePrecisionDouble;

CPTMutableLineStyle *lineStyle1 = [[dataSourceLinePlot1.dataLineStyle mutableCopy] autorelease];
lineStyle1.lineWidth                 = 1.0;
lineStyle1.lineColor                 = [CPTColor redColor];
dataSourceLinePlot1.dataLineStyle = lineStyle1;

dataSourceLinePlot1.dataSource = self;
[graph addPlot:dataSourceLinePlot1];

 // Plot space
 CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
 plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger(0) length:CPTDecimalFromUnsignedInteger(kMaxDataPoints - 1)];
 plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger(0) length:CPTDecimalFromUnsignedInteger(100)];

}

如果只显示第一张图表,我认为这个问题是我自己的错,但因为每一张图表都显示它对我没有任何意义..

我唯一的猜测是它是某种计时问题,但我调试了它并推迟了每个图表的创建,并没有区别......

我甚至删除了第3个,第5个图表以查看其他人现在是否已呈现,但是之前未显示的相同的3个图表仍然不可见,这真的让我失望..(即只有第一个图表显示出来了4已启用!)

对此的任何帮助都非常赞赏...

我可能只是使用Apple Developer Library中提供加速度计数据的代码,因为它非常轻巧,可以同时支持屏幕上的6个图表而不会出现问题......

Core-Plot似乎没有达到我认为的任务......

1 个答案:

答案 0 :(得分:1)

您没有说明哪些图表没有显示,但由于它总是相同的,我怀疑视图层次结构存在问题。尝试更改

`[chartVC1.view setFrame:self.Panel1.frame];`

`[chartVC1.view setFrame:self.Panel1.bounds];`
每个图表