HeartRateCell.swift 3.09 KB
//
//  HeartRateCell.swift
//  Twear
//
//  Created by yangbin on 2021/11/16.
//

import UIKit
import Charts

class HeartRateCell: UICollectionViewCell {
    
    @IBOutlet weak var hrValueLabel: UILabel!
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var noDataImageView: UIImageView!
    @IBOutlet weak var lineChartView: LineChartView!
    
    var hrHistory: [HeartRateModel] = [] {
        didSet {
            let count = hrHistory.count
            if count == 0 {
                hrValueLabel.text = "--"
                dateLabel.text = LocString("暂无数据")
                noDataImageView.isHidden = false
                lineChartView.isHidden = true
            } else {
                hrValueLabel.text = "\(hrHistory[count-1].value)"
                dateLabel.text = hrHistory[count-1].date!.toString(.custom("yyyy/MM/dd"))
                updateChartView(hrHistory)
                noDataImageView.isHidden = true
                lineChartView.isHidden = false
            }
        }
    }
    
    private func updateChartView(_ hrHistory: [HeartRateModel]) {
        setupChartView()
        let hr = hrHistory.max{$0.value < $1.value}
        let maxHr = max(hr?.value ?? 100, 100)
        lineChartView.leftAxis.axisMaximum = Double(maxHr) * 1.1
        
        var dataEntries = [ChartDataEntry]()
        for (i, hr) in hrHistory.enumerated() {
            dataEntries.append(ChartDataEntry(x: Double(i), y: Double(hr.value)))
        }
        if dataEntries.count == 1 {
            dataEntries.append(ChartDataEntry(x: dataEntries[0].x+0.5, y: dataEntries[0].y))
        }
        let dataSet = LineChartDataSet(entries: dataEntries, label: nil)
        dataSet.drawCirclesEnabled = false
        dataSet.drawValuesEnabled = false
        dataSet.mode = .cubicBezier
        dataSet.setDrawHighlightIndicators(false)
        dataSet.setColor(UIColor.rgbColorFromHex(0xFF0000))
        dataSet.lineWidth = 1
        dataSet.drawFilledEnabled = true
        
        let gradientColors = [UIColor.rgbColorFromHex(0xE10025).cgColor, UIColor.rgbColorFromHex(0xFFFFFF).cgColor]
        let gradient = CGGradient(colorsSpace: nil, colors: gradientColors as CFArray, locations: [1.0, 0.0])
        dataSet.fillAlpha = 1.0
        dataSet.fill = Fill(linearGradient: gradient!, angle: 90)
        lineChartView.data = LineChartData(dataSets: [dataSet])
    }
    
    func setupChartView() {
        lineChartView.chartDescription?.enabled = false
        lineChartView.legend.enabled = false
        lineChartView.setScaleEnabled(false)
        lineChartView.rightAxis.enabled = false
        
        let leftAxis = lineChartView.leftAxis
        leftAxis.axisMinimum = 50 //设置左侧Y轴最小值
        leftAxis.granularity = 10
        leftAxis.enabled = false
        
        let xAxis = lineChartView.xAxis
        xAxis.axisMinimum = 0
        xAxis.axisMaximum = 30
        xAxis.granularity = 1 //间隔
        xAxis.enabled = false
    }
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
//        lineChartView.isUserInteractionEnabled = false
        // Initialization code
    }

}