Swift - 第三方图表库Charts使用详解10(折线图9:自动显示中间拐点标签、滑动居中)

九、自动显示中央拐点的 MarkerView 标签
1,效果图
(1)同前文一样,图表中有 100 条数据,通过左右拖动进行查看。
(2)不同的是,在左右拖动的过程中,会自动高亮选中显示区域最中间的一个数据点,并显示它的气泡标签。
原文:Swift - 第三方图表库Charts使用详解10(折线图9:自动显示中间拐点标签、滑动居中)     原文:Swift - 第三方图表库Charts使用详解10(折线图9:自动显示中间拐点标签、滑动居中)
在这里插入图片描述

2,样例代码
关于气泡标签组件的代码(BalloonMarker)可以参考我之前写的这篇文章:
https://www.hangge.com/blog/cache/detail_2127.html

import UIKit
import Charts

class ViewController: UIViewController {

//折线图
var chartView: LineChartView!
 
override func viewDidLoad() {
    super.viewDidLoad()
     
    //创建折线图组件对象
    chartView = LineChartView()
    chartView.frame = CGRect(x: 20, y: 80, width: self.view.bounds.width - 40,
                             height: 250)
    chartView.delegate = self //设置代理
    self.view.addSubview(chartView)
     
    //设置交互样式
    chartView.scaleXEnabled = false //允取消X轴缩放
    chartView.scaleYEnabled = false //取消Y轴缩放
    chartView.doubleTapToZoomEnabled = false //双击缩放
     
    //生成100条随机数据
    var dataEntries = [ChartDataEntry]()
    for i in 0..<100 {
        let y = arc4random()%100
        let entry = ChartDataEntry.init(x: Double(i), y: Double(y))
        dataEntries.append(entry)
    }
    //这50条数据作为1根折线里的所有数据
    let chartDataSet = LineChartDataSet(values: dataEntries, label: "客流量(天)")
    //目前折线图只包括1根折线
    let chartData = LineChartData(dataSets: [chartDataSet])
     
    //设置折线图数据
    chartView.data = chartData
     
    //图表最多显示10个点
    chartView.setVisibleXRangeMaximum(10)
    //默认显示最后一个数据
    chartView.moveViewToX(99)
    //自动选中图表中央的数据点
    highlightCenterValue()
}
 
//自动选中图表中央的数据点
func highlightCenterValue() {
    //获取中点坐标
    let x = Double(chartView.bounds.width/2)
    let selectionPoint = CGPoint(x: x, y: 0)
    //获取最接近中点位置的数据点
    let h = chartView.getHighlightByTouchPoint(selectionPoint)
    //将这个数据点高亮(同时自动调用 chartValueSelected 这个代理方法)
    chartView.highlightValue(h, callDelegate: true)
}
 
//显示MarkerView标签
func showMarkerView(value:String){
    //使用气泡状的标签
    let marker = BalloonMarker(color: UIColor(white: 180/255, alpha: 1),
                    font: .systemFont(ofSize: 12),
                    textColor: .white,
                    insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8))
    marker.chartView = self.chartView
    marker.minimumSize = CGSize(width: 80, height: 40)
    marker.setLabel("数据:\(value)")
    self.chartView.marker = marker
}

}

extension ViewController: ChartViewDelegate {
//图表通过手势拖动后的回调
func chartTranslated(_ chartView: ChartViewBase, dX: CGFloat, dY: CGFloat) {
//自动选中图表中央的数据点
highlightCenterValue()
}

//折线上的点选中回调
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry,
                        highlight: Highlight) {
    //显示该点的MarkerView标签
    self.showMarkerView(value: "\(entry.y)")
}

}

附:滑动居中
1,问题描述
在图表滑动过程中,虽然都会自动高亮选中一个最接近中点的拐点。但当滑动停止时,这个高亮的拐点可能并不会停留在绝对正中间的位置。

2,解决办法
要解决这个问题,我们只需要像前文一样,在 chartValueSelected() 这个代理方法中,手动修正它的位置,让它居中。

//折线上的点选中回调
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry,
highlight: Highlight) {
//将该点居中(其实就是将该点左边第5个点移动道图表左侧)
self.chartView.moveViewToAnimated(xValue: entry.x - 5, yValue: 0,
axis: .left, duration: 1)
//显示该点的MarkerView标签
self.showMarkerView(value: “(entry.y)”)
}

原文出自:www.hangge.com 原文链接:https://www.hangge.com/blog/cache/detail_2135.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值