3

我正在尝试使图表中的列可选择,并在单击时显示所选列的更多详细信息。每列由一个系列表示(您将在一秒钟内理解)。

这就是我构建每个系列的方式:

-(SChartSeries *)sChart:(ShinobiChart *)chart seriesAtIndex:(int)index {
    SChartColumnSeries *series = [SChartColumnSeries new];
    series.style.showAreaWithGradient = NO;
    series.stackIndex = [NSNumber numberWithInt:0];
    series.selectedStyle.showAreaWithGradient = NO;
    CHART_COLOR_TYPE dataType = [TestGraphDataManager getDataType:index];
    series.style.areaColor =    (dataType == ACCOUNT)?
                                    [UIColor colorWithRed:227.0f/255.0f green:179.0f/255.0f blue:0.0f/255.0f alpha:0.5f]:
                                    [UIColor colorWithRed:0.0f/255.0f green:172.0f/255.0f blue:235.0f/255.0f alpha:0.5f];

    series.selectedStyle.areaColor = [UIColor colorWithRed:129.0f/255.0f green:0.0f/255.0f blue:82.0f/255.0f alpha:0.5f];
    series.selectionMode = SChartSelectionSeries;

    series.style.lineColor = [UIColor clearColor];
    series.selectedStyle.lineColor = [UIColor clearColor];

    return series;
}

我目前遇到的问题是只有第一个系列是可选的。我还让每个条形图都用不同的系列表示,这样我就可以轻松地切换它的颜色series.selectionMode = SChartSelectionSeries

最后我有这个委托事件,这样我就可以加载额外的数据,但它也只在第一个系列中被调用

- (void)sChart:(ShinobiChart *)chart toggledSelectionForSeries:(SChartSeries *)series nearPoint:(SChartDataPoint *)dataPoint atPixelCoordinate:(CGPoint)pixelPoint{
    NSLog(@"click event called");
    //Display data
}

有谁知道为什么会这样?一整天都让我发疯。

谢谢您,提前提供任何帮助。

编辑: 我发现了主要问题,因为series.stackIndex = [NSNumber numberWithInt:0];它使所有条具有相同的名称堆栈(因为名称的名称重复在我看来这不是问题),我这样做是为了使所有条都相同与刻度标记的距离,因此条形不是很尖。但我相信 shinobi 为这些值设置了隐形条,并且它们高于另一个,因此只有第一个系列可供选择,因为它高于其他系列。如果我删除那条线,图形看起来很糟糕,但都是可点击的。关于如何绕过这个或避免这个问题的任何想法?

它应该看起来如何(使用堆叠索引),但它会破坏点击事件: 带堆叠

如果没有堆叠索引,所有条形图都是可点击的,但看起来不太好,而且我拥有的条形图越多,它只使用 4 个条形图就会变得更糟: 无需堆叠

4

1 回答 1

1

从 Shinobi 那里抢过来 - 感谢您与我们联系!

这可以通过使用子类化来解决,并为列偏移返回零,如下所示:

@interface MyColumnSeries : SChartColumnSeries
@end

@implementation MyColumnSeries
- (double) offsetOfStackInChart:(ShinobiChart *)chart forDatapointIndex:(const int)pointIndex withPointSelector:(SEL)pointSelector
{
    return 0.0;
}
@end
于 2012-11-21T17:36:33.643 回答