// // SBTChartsView.swift // SolarBT // // Created by weclouds on 2019/2/27. // Copyright © 2019 weclouds. All rights reserved. // import UIKit extension UIImage{ /** * 生成给你一张渐变色的图片 * colors 颜色数组 * rect 图片大小 * 返回渐变图片 */ } struct BarIndexPath { var viewIndex : Int? var barIndex: Int? } class SBTChartsView: UIView{ //读取超压电压~ var arr0 : [Float]? = [Float]() var arr1 : [Float]? = [Float]() var arr2 : [Float]? = [Float]() var arr3 : [Float]? = [Float]() var arr4 : [Float]? = [Float]() var arr5 : [Float]? = [Float]() var arr6 : [Float]? = [Float]() var arr7 : [Float]? = [Float]() // var arr8 : [Float]? = [Float]() // var arr9 : [Float]? = [Float]() var weekData : [OneDayData]? { didSet{ } } var lastButton:UIButton? = UIButton() var selectedIndex: Int? = 0 func fillChartsData(_ weekData : [OneDayData]?) { arr0?.removeAll() arr1?.removeAll() arr2?.removeAll() arr3?.removeAll() arr4?.removeAll() arr5?.removeAll() if let arr = weekData { for i in 0.. UIImage { let rect = CGRect(x: 0, y: 0, width: 1, height: 1) UIGraphicsBeginImageContext(rect.size) let context = UIGraphicsGetCurrentContext() context?.setFillColor(color.cgColor) context?.fill(rect) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image! } func gradientImage(_ colors: [UIColor]?, rect: CGRect) -> UIImage? { if colors?.count == 0 || rect.equalTo(CGRect.zero){ return nil } let gradientLayer = CAGradientLayer() gradientLayer.frame = rect gradientLayer.startPoint = CGPoint(x: 0, y: 0) gradientLayer.endPoint = CGPoint(x: 1, y: 0) let mutColors = NSMutableArray(capacity: colors!.count) for color in colors! { mutColors.add(color.cgColor) } gradientLayer.colors = (NSArray(array: mutColors) as! [Any]) UIGraphicsBeginImageContextWithOptions(gradientLayer.frame.size, gradientLayer.isOpaque, 0) let outputImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return outputImage } //MARK : 设置数据 func configCharts() { for i in 0..<3 { let ccc : DVBarChartView = viewWithTag(100000 + i) as! DVBarChartView ccc.removeAllPlot() ccc.reloadInputViews() if i == 0 { ccc.addPlot(arr0) ccc.addPlot2(arr1) var TitleArr0 = [String]() TitleArr0.removeAll() for value in arr0! { let title = String(format: "%@\n%.1fV","Minimum_battery_voltage".da_localizedStr(), value) TitleArr0.append(title) } var TitleArr1 = [String]() TitleArr1.removeAll() for value in arr1! { let title = String(format: "%@\n%.1fV","Maximum_battery_voltage".da_localizedStr(), value) TitleArr1.append(title) } ccc.xTitles = TitleArr0 ccc.xTitles2 = TitleArr1 //判断最大值 let max0 = CGFloat((arr0?.max())!) let max1 = CGFloat((arr1?.max())!) let yAxisMaxValue = max0 > max1 ? max0 : max1 // ccc.yAxisMaxValue = yAxisMaxValue * 2 ccc.legendTitle1 = "Maximum_battery_voltage".da_localizedStr() ccc.legendTitle2 = "Minimum_battery_voltage".da_localizedStr() }else if i == 1 { ccc.addPlot(arr2) ccc.addPlot2(arr3) var TitleArr0 = [String]() TitleArr0.removeAll() for value in arr2! { let title = String(format: "%@\n%.2fA","Maximum_current".da_localizedStr(), value) TitleArr0.append(title) } var TitleArr1 = [String]() TitleArr1.removeAll() for value in arr3! { let title = String(format: "%@\n%.3fkWh","Power_ge".da_localizedStr(), value) TitleArr1.append(title) } ccc.xTitles = TitleArr1 ccc.xTitles2 = TitleArr0 //判断最大值 let max0 = CGFloat((arr2?.max())!) let max1 = CGFloat((arr3?.max())!) let a = [max0,max1] ccc.legendTitle1 = "Maximum_current".da_localizedStr() ccc.legendTitle2 = "Power_ge".da_localizedStr() // ccc.yAxisMaxValue = a.max()! * 3 }else if i == 2 { ccc.addPlot(arr4) ccc.addPlot2(arr5) var TitleArr0 = [String]() TitleArr0.removeAll() for value in arr4! { let title = String(format: "%@\n%.2fA","Maximum_discharge_current".da_localizedStr(), value) TitleArr0.append(title) } var TitleArr1 = [String]() TitleArr1.removeAll() for value in arr5! { let title = String(format: "%@\n%.3fkWh","Discharge_amount".da_localizedStr(), value) TitleArr1.append(title) } ccc.xTitles = TitleArr1 ccc.xTitles2 = TitleArr0 ccc.legendTitle1 = "Maximum_discharge_current".da_localizedStr() ccc.legendTitle2 = "Discharge_amount".da_localizedStr() // ccc.yAxisMaxValue = a.max()! * 3 } ccc.draw() } } } extension SBTChartsView :DVBarChartViewDelegate{ func barChartView(_ barChartView: DVBarChartView!, didSelectedBarAt index: Int) { AppShare.batIndexPath = BarIndexPath(viewIndex: barChartView.tag - 100000, barIndex: index) log.debug( AppShare.batIndexPath) } }