将UIButtons对齐到水平Core Plot CPTBarPlot的条形图

时间:2011-10-20 07:23:35

标签: objective-c core-plot

我在我的第一个iPad项目中使用Core Plot 0.9。我需要创建一个水平条形图,并在左边创建与每个条形中心对齐的UIButtons,每个条形一个按钮,参见附加的screenshot

我的设置非常简单:

我有一个自定义UIView子类,它充当容器。 在其中,我有2个子视图:一个CPTGraphHostingView和一个包含我的UIButtons的UIView。 我在CPTGraphHostingView中托管了一个CPTXYGraph,并指定了一些填充值。

在我的自定义类中,我有一个方法,一旦设置了dataSource就会创建按钮:

for (int i = 0; i < nbRecords; i++) {

    // grab the bar location and create a plot point for it
    NSNumber* loc = [dataSource numberForPlot:plot field:CPTBarPlotFieldBarLocation recordIndex:i];
    double plotPoint[2] = {0, [loc doubleValue]};

    // Convert the plot point to plot area space coordinates (I guess ;))
    CGPoint viewPoint = [graph.defaultPlotSpace plotAreaViewPointForDoublePrecisionPlotPoint:plotPoint];

    // Convert the view point to the button container layer coordinate system        
     CGPoint p = [graph convertPoint:viewPoint fromLayer:graph.plotAreaFrame.plotArea];

    // Create the button
    CGRect rect = CGRectMake(0, p.y - 11, 100, 22);
    UIButton *btn = [[UIButton alloc] initWithFrame:rect];
    [btn setTitle:@"test" forState:UIControlStateNormal];        
    [buttonView addSubview:btn];
    [self addSubview:btn];
    [array addObject:btn];
    [btn release];
}

按钮已创建但对齐效果不佳...我注意到如果我将所有图形填充设置为0,则按钮对齐(但当然我需要填充)。

我是否遗漏了积分转换中的某些内容或步骤?关于如何将plotAreaPoint坐标转换为任何其他UIView,我有点困惑......!

1 个答案:

答案 0 :(得分:0)

好的我自己想出了问题。事实上,我在图表有机会布局之前添加了按钮。在循环之前调用图形的方法-layoutIfNeeded:解决了对齐问题