使用iOS图表更改饼图中所选切片的颜色

时间:2016-02-18 13:32:47

标签: ios ios-charts

在iOS Charts库中,与BarChartDataSet类不同,PieChartDataSet不包含任何属性highlightAlpha,可用于为饼图上的选定切片设置不同的alpha图表。

虽然可以引入这样的属性并使用CGContextSetAlpha()我们可以修改突出显示的切片的透明度,但我想在不对库代码进行任何更改的情况下执行此操作。怎么办呢?

2 个答案:

答案 0 :(得分:0)

我检查了代码,目前它不支持这个。

public override func drawHighlighted(context context: CGContext, indices: [ChartHighlight])
{
    ...
    CGContextSetFillColorWithColor(context, set.colorAt(xIndex).CGColor)
    ...
}

这只是读取数据集颜色并用它来突出显示。我认为欢迎您为这样的功能提交PR。或者我有空的时候会这样做。

对于您来说,更改源代码似乎是目前唯一的选择。这就是为什么我认为你贡献的好处。

答案 1 :(得分:0)

目前,我已使用委托方法解决了问题:

- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView
                     entry:(ChartDataEntry * __nonnull)entry
              dataSetIndex:(NSInteger)dataSetIndex
                 highlight:(ChartHighlight * __nonnull)highlight
{
    PieChartView *pPieChartView = (PieChartView *)chartView;

    PieChartDataSet *pDataSet = (PieChartDataSet *)[pPieChartView.data.dataSets objectAtIndex:dataSetIndex];

    NSMutableArray *pColors = [[NSMutableArray alloc] initWithArray:pDataSet.colors
                                                          copyItems:YES];

    for (int nIndex = 0; nIndex < pColors.count; nIndex++) {

        UIColor *pColor = [pColors objectAtIndex:nIndex];

        if (nIndex == entry.xIndex) {

            pColor = [pColor colorWithAlphaComponent:1];
        }
        else {

            pColor = [pColor colorWithAlphaComponent:0.3];
        }

        [pColors replaceObjectAtIndex:nIndex
                           withObject:pColor];
    }

    pDataSet.colors = pColors;
}

就我而言,我加载了alpha分量小于1的切片。在突出显示切片时,alpha值更改为1.

如果highlightAlpha类中引入了PieChartDataSet属性,则可以实现相同的效果。在drawHighlighted方法中,需要调用CGContextSetAlpha(context, highlightAlpha)BarChartDataSet也有高亮颜色,PieChartDataSet中没有。