PressureCell.swift 3.79 KB
//
//  PressureCell.swift
//  Twear
//
//  Created by yangbin on 2022/2/28.
//

import UIKit
import Charts

class PressureCell: UICollectionViewCell {
    @IBOutlet weak var pressureLabel: UILabel!
    @IBOutlet weak var detailLabel: UILabel!
    @IBOutlet weak var valueLabel: UILabel!
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var noDataImageView: UIImageView!
    @IBOutlet weak var lineChartView: LineChartView!
    
    var pressureHistory: [PressureModel] = [] {
        didSet {
            let count = pressureHistory.count
            
            if count == 0 {
                valueLabel.text = "--"
                dateLabel.text = LocString("暂无数据")
                detailLabel.text = ""
                noDataImageView.isHidden = false
                lineChartView.isHidden = true
            } else {
                var value = pressureHistory[count-1].value
                if let pressure = pressureHistory.reversed().first(where: {$0.value > 0}) {
                    value = pressure.value
                }
                valueLabel.text = "\(value)"
                dateLabel.text = pressureHistory[count-1].date!.toString(.custom("yyyy/MM/dd"))
                updateChartView(pressureHistory)
                noDataImageView.isHidden = true
                lineChartView.isHidden = false
                switch value {
                case 1..<30:
                    detailLabel.text = LocString("轻松")
                case 30..<60:
                    detailLabel.text = LocString("正常")
                case 60..<80:
                    detailLabel.text = LocString("中等")
                case 80..<100:
                    detailLabel.text = LocString("偏高")
                default:
                    break
                }
            }
        }
    }
    
    
    
    private func updateChartView(_ pressureHistory: [PressureModel]) {
        setupChartView()
   
        var dataEntries = [ChartDataEntry]()
        for (i, pressure) in pressureHistory.enumerated() {
            dataEntries.append(ChartDataEntry(x: Double(i), y: Double(pressure.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 = .horizontalBezier
        dataSet.setDrawHighlightIndicators(false)
        dataSet.setColor(UIColor.rgbColorFromHex(0x2AA12B))
        dataSet.lineWidth = 1
        dataSet.drawFilledEnabled = true
        
        let gradientColors = [UIColor.rgbColorFromHex(0x16E017).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 = 0 //设置左侧Y轴最小值
        leftAxis.axisMaximum = 100
        leftAxis.granularity = 20
        leftAxis.enabled = false
        
        let xAxis = lineChartView.xAxis
        xAxis.axisMinimum = 0
        xAxis.axisMaximum = 30
        xAxis.granularity = 1 //间隔
        xAxis.enabled = false
    }
    
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
        pressureLabel.text = LocString("压力")
        // Initialization code
    }


}