You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于iOS Charts的触摸交互追踪及条目高亮实现咨询

当然可以实现这个触摸追踪高亮的效果!其实iOS Charts本身就提供了现成的机制来做这个,不用自己从零开始加手势——不过如果你偏好自定义手势的方案,我也会给你详细说明怎么实现。

方法一:利用Charts内置的交互功能(最简单)

这是最省心的方案,直接配置图表的交互属性就能实现:

  • 首先禁用图表的平移、缩放等不需要的交互,避免触摸时触发默认的平移操作:
    chartView.dragEnabled = false
    chartView.scaleEnabled = false
    chartView.pinchZoomEnabled = false
    
  • 开启拖拽时的高亮功能,这样手指移动时会自动追踪并高亮对应条目:
    chartView.highlightPerDragEnabled = true
    // 如果需要点击也能高亮,可以加上这个
    chartView.highlightPerTapEnabled = true
    
  • (可选)自定义高亮样式:如果默认的高亮线、颜色不符合你的需求,可以调整这些属性:
    chartView.highlightColor = .red
    chartView.highlightLineWidth = 2.0
    chartView.drawVerticalHighlightIndicatorEnabled = true // 显示垂直高亮线
    chartView.drawHorizontalHighlightIndicatorEnabled = false // 隐藏水平高亮线(按需设置)
    
    要是需要显示更复杂的高亮提示(比如数值标签),还可以自定义MarkerView并赋值给chartView.marker。

方法二:自定义UIGestureRecognizer实现(按需选择)

如果你一定要自己通过手势来控制,也完全可行,关键是用Charts提供的API获取触摸点对应的条目:

  1. 给图表添加手势,注意要关闭手势的cancelsTouchesInView,避免和图表本身的手势冲突:
    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
    panGesture.cancelsTouchesInView = false
    chartView.addGestureRecognizer(panGesture)
    
  2. 在手势处理方法中,获取触摸点并查询对应的高亮信息:
    @objc private func handlePan(_ gesture: UIPanGestureRecognizer) {
        let touchPoint = gesture.location(in: chartView)
        // 调用Charts的API获取触摸点对应的Highlight对象
        guard let highlight = chartView.getHighlightByTouchPoint(touchPoint) else {
            chartView.highlightValue(nil)
            return
        }
        
        switch gesture.state {
        case .began, .changed:
            // 高亮对应条目
            chartView.highlightValue(highlight)
        case .ended, .cancelled:
            // 手势结束后取消高亮
            chartView.highlightValue(nil)
        default:
            break
        }
    }
    
  3. 别忘了确保你的数据集允许高亮:每个ChartDataSet都要设置isHighlightEnabled = true(默认是true,但如果之前改过的话要检查)。

最后提醒:两种方法都能实现你要的效果,推荐第一种内置方案,因为它已经处理了很多边缘情况(比如触摸点在图表范围外的处理、多数据集的高亮逻辑等),不用自己额外处理。

内容的提问来源于stack exchange,提问作者Jack Guo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:20:14