iOS图表 - 仅在突出显示时绘制值

时间:2017-09-24 13:06:53

标签: ios charts highlight ios-charts

我想在点击iOS-Chart时突出显示并显示值。我启用了突出显示而不启用了值,因为我只需要点击并突出显示

lineChartDataSet.drawValuesEnabled = false
lineChartDataSet.highlightEnabled = true

我需要这个功能吗?

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {}

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,但我认为对于某些开发人员来说这仍然是现实。

如果要显示值,仅在用户触摸图表视图时显示气球或突出显示栏,则可能会触发UILongPressGestureRecognizer的触摸事件。

我实例化了TappableLineChartView中的新LineChartView类。但是您可以以相同的方式使用BarChartView。另外,如果您不想实例化新类,则可以在视图控制器中合并addTapRecognizerchartTapped函数。

在我的示例中,我显示和隐藏值,但是以相同的方式,您可以显示和隐藏气球或其他标记。

class TappableLineChartView: LineChartView {

    public override init(frame: CGRect)
    {
        super.init(frame: frame)
        addTapRecognizer()
    }

    public required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
        addTapRecognizer()
    }

    func addTapRecognizer() {
        let tapRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(chartTapped))
        tapRecognizer.minimumPressDuration = 0.1
        self.addGestureRecognizer(tapRecognizer)
    }

    @objc func chartTapped(_ sender: UITapGestureRecognizer) {
        if sender.state == .began || sender.state == .changed {
            // show
            let position = sender.location(in: self)
            let highlight = self.getHighlightByTouchPoint(position)
            let dataSet = self.getDataSetByTouchPoint(point: position)
            dataSet?.drawValuesEnabled = true
            highlightValue(highlight)
        } else {
            // hide
            data?.dataSets.forEach{ $0.drawValuesEnabled = false }
            highlightValue(nil)
        }
    }
}
相关问题