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

如何使用Charts库实现折线图仅在用户触摸点位时显示数值?

实现方案

要实现触摸折线点位弹出对应数值的效果,按以下步骤修改代码即可:

  1. 绑定图表代理、开启交互支持
    首先让当前控制器遵守ChartViewDelegate协议,同时给折线图开启高亮交互:
// 控制器类声明处添加协议遵守
class YourViewController: UIViewController, ChartViewDelegate {
    // 折线图初始化时设置代理
    lineChartView.delegate = self
    // 开启点击、拖动选中点位的能力
    lineChartView.highlightPerTapEnabled = true
    lineChartView.highlightPerDragEnabled = true
}
  1. 调整数据集的高亮配置
    在你原有的折线数据集配置代码中补充高亮相关属性:
let set1 = LineChartDataSet(entries: yValues, label: "Subscribers")
set1.drawCirclesEnabled = false
set1.mode = .cubicBezier
set1.lineWidth = 4
set1.setColor(#colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1))
set1.drawHorizontalHighlightIndicatorEnabled = false
// 补充高亮配置:可根据需求选择是否保留垂直高亮线
set1.drawVerticalHighlightIndicatorEnabled = true
set1.highlightColor = #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)
set1.highlightLineWidth = 1.5
set1.drawValuesEnabled = true
set1.valueTextColor = .systemGray

let data = LineChartData(dataSet: set1)
data.setDrawValues(false)

lineChartView.data = data
  1. 配置数值弹出标记
    Charts库自带气泡样式的标记组件BalloonMarker,直接配置即可实现你需要的弹窗效果,在给图表赋值data之前添加如下代码:
// 初始化气泡标记,配色和折线统一
let marker = BalloonMarker(color: #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1),
                           font: .systemFont(ofSize: 12, weight: .medium),
                           textColor: .white,
                           insets: UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8))
// 设置显示的数值格式
marker.setLabel { entry in
    return String(format: "%.1f", entry.y)
}
marker.minimumSize = CGSize(width: 40, height: 30)
// 将标记绑定到折线图
lineChartView.marker = marker

修改完成后运行项目,点击或拖动折线点位即可弹出对应数值气泡,符合你给出的参考效果。

内容的提问来源于stack exchange,提问作者As If Prince

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:57:03