123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- //
- // IHRoomHistoryView.swift
- // Inhealth
- //
- // Created by weclouds on 2019/12/16.
- // Copyright © 2019 weclouds. All rights reserved.
- //
- import UIKit
- protocol IHRoomHistoryViewDelegate {
- }
- class IHRoomHistoryView: UIView {
-
- var dateType:Int? = 0{
- didSet{
- if let dateType = self.dateType {
- self.toolbar.currentDateType = dateType
- if let updateTime = self.updatetimes{
- let first = updateTime.first
- let last = updateTime.last
- if self.dateType == nil || self.dateType == 0 {
- let nowDay = nowTime(nil)
- let lastDay = getLastDay(nowDay)
- self.timeRange = "\(lastDay) \(first!)-\(nowDay) \(last!)"
- }else{
- self.timeRange = "\(first!)~\(last!)"
- }
- self.details![0] = self.timeRange!
-
- }
- }
- }
- }
-
- var averageValue:String? = "0"{
- didSet{
- if let ava = self.averageValue {
- self.lineChartView.avarageValue = ava
- self.barchartsView.avarageValue = ava
- }
-
- }
- }
- var devID:String?
- var delegate : IHRoomHistoryViewDelegate?
- var history :[String]?{
- didSet{
- if let history = history {
- self.lineChartView.data = history
- self.barchartsView.data = history
- calculateAverageValue()
- }
- }
- }
- //时间范围
- var timeRange:String?{
- didSet{
-
- }
- }
- var updatetimes:[String]?{
- didSet{
- if let updateTime = self.updatetimes{
- let first = updateTime.first
- let last = updateTime.last
- if self.dateType == nil || self.dateType == 0 {
- let nowDay = nowTime(nil)
- let lastDay = getLastDay(nowDay)
- self.timeRange = "\(lastDay) \(first!)-\(nowDay) \(last!)"
- self.details![0] = self.timeRange!
- }
- self.lineChartView.xVals = updateTime
- self.barchartsView.xVals = updateTime
- }
- }
- }
- var unit :String?{
- didSet{
- if let unit = self.unit {
- self.details![2] = unit
- self.lineChartView.unit = unit
- self.barchartsView.unit = unit
- }
-
- }
- }
-
- var devType:String?{
- didSet{
- if let devType = self.devType {
- self.toolbar.devType = devType
- }
- }
- }
- let titles = ["当前选择时间","用电量","数据单位","平均值"]
- var details :[String]? = ["","","",""]{
- didSet{
- self.tableView.reloadData()
- }
- }
- lazy var tableView: UITableView = {
- let tableView = UITableView(frame: CGRect.zero, style: .plain)
- tableView.dataSource = self
- tableView.delegate = self
- tableView.separatorStyle = .none
- tableView.backgroundColor = .white
- tableView.register(UINib(nibName: "IHRoomHistoryCell", bundle: nil), forCellReuseIdentifier: "cell")
- return tableView
- }()
-
- lazy var lineChartView: IHLineChartView = {
- let lineChartView = IHLineChartView()
- lineChartView.delegate = self
- return lineChartView
- }()
- lazy var toolbar: IHRoomHistoryToolBar = {
- let toolBar = IHRoomHistoryToolBar()
- toolBar.delegate = self
- return toolBar
- }()
-
- lazy var barchartsView: IHHistoryBarChartView = {
- let barCharts = IHHistoryBarChartView()
- barCharts.isHidden = true
- barCharts.delegate = self
- // barCharts.backgroundColor = UIColor.red
- return barCharts
- }()
- override init(frame: CGRect) {
- super.init(frame: frame)
- addSubview(lineChartView)
-
- lineChartView.backgroundColor = .white
- addSubview(toolbar)
- addSubview(tableView)
- addSubview(barchartsView)
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- override func layoutSubviews() {
- super.layoutSubviews()
- lineChartView.snp.makeConstraints { (make) in
- make.top.right.left.equalToSuperview()
- make.height.equalTo(270)
- }
- barchartsView.snp.makeConstraints { (make) in
- make.top.right.left.equalToSuperview()
- make.height.equalTo(270)
- }
- toolbar.snp.makeConstraints { (make) in
- make.right.left.equalToSuperview()
- make.top.equalTo(lineChartView.snp.bottom)
- make.height.equalTo(50)
- }
- tableView.snp.makeConstraints { (make) in
- make.bottom.right.left.equalToSuperview()
- make.top.equalTo(toolbar.snp.bottom)
- }
-
-
- }
- //计算
- func calculateAverageValue() {
- var sum:Double = 0
- for hisStr in self.history! {
- let hisDow = Double(hisStr)
- sum += hisDow!
- }
- let avarerage = sum / Double(self.history!.count)
- let avaStr = String(format: "%.1f", avarerage)
- self.details![3] = avaStr
- self.averageValue = avaStr
- }
-
- // MARK: 获取当前时间
- // 这里的 type 是指日期的格式 “yyyyMMdd” 或者 “yyyy-MM-dd” 这样子
- func nowTime(_ type: String?) -> String {
- let currentDate = Date()
- let formatter = DateFormatter()
- formatter.dateFormat = type ?? "dd/MM/yyyy"
- let time = formatter.string(from: currentDate)
- return time
- }
- // MARK: 前一天的时间
- // nowDay 是传入的需要计算的日期
- func getLastDay(_ nowDay: String) -> String {
- let dateFormatter = DateFormatter()
- dateFormatter.dateFormat = "dd/MM/yyyy"
-
- // 先把传入的时间转为 date
- let date = dateFormatter.date(from: nowDay)
- let lastTime: TimeInterval = -(24*60*60) // 往前减去一天的秒数,昨天
- // let nextTime: TimeInterval = 24*60*60 // 这是后一天的时间,明天
-
- let lastDate = date?.addingTimeInterval(lastTime)
- let lastDay = dateFormatter.string(from: lastDate!)
- return lastDay
- }
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
-
- }
- }
- extension IHRoomHistoryView:IHRoomHistoryToolBarDelegate{
- func roomHistorydidSelectedLeftBarItem(at index: Int) {
- log.debug("index = \(index)")
- if index == 0 {
- lineChartView.chartView!.animate(xAxisDuration: 2)
- lineChartView.isHidden = false
- barchartsView.isHidden = true
- }else{
- lineChartView.isHidden = true
- barchartsView.isHidden = false
- barchartsView.chartView.animate(yAxisDuration: 2)
- }
- }
-
- func roomHistorydidSelectedRightBarItem(at index: Int) {
- if self.devType == "1" || self.devType == "2" || self.devType == "4" {
- if index == 4 {
- let format = "yyyy-MM-dd"
- DatePickerAlertView.show(withDateFormat: format, datePickerMode: .date, selectCompletion: { (fromDate, toDate) in
- let fromStr = DatePickerAlertView.dateString(with: fromDate, format: format)
- let toStr = DatePickerAlertView.dateString(with: toDate, format: format)
- log.debug("fromdate = = \(fromStr), toDate - \(toStr)")
- let date = "\(fromStr!)/\(toStr!)"
- let dict = ["index":"\(index)","date":date]
- NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict)
- }) { (error) in
- if let error = error{
- g_showHUD(error)
- }
-
- }
- }else{
- let dict = ["index":"\(index)","date":""]
- NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict)
- }
- }else if self.devType == "3"{
- let dict = ["index":"\(index)","date":""]
- NotificationCenter.default.post(name: NSNotification.Name(kNotifactionIHRoomLightHistoryVCtrReloadSegmentViewData), object: dict)
-
- }
-
-
- }
-
-
- }
- extension IHRoomHistoryView : UITableViewDelegate,UITableViewDataSource{
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return 4
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! IHRoomHistoryCell
- cell.selectionStyle = .none
- cell.mTitle = titles[indexPath.row]
- cell.mDetail = details![indexPath.row]
- return cell
- }
-
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- return 66
- }
-
- }
- extension IHRoomHistoryView:IHLineChartViewDelegate{
- func lineChartDidSelected(_ index: Int) {
- self.details![0] = self.updatetimes![index]
- self.details![1] = self.history![index]
- }
- func lineChartDeselected() {
- self.details![0] = self.timeRange!
- self.details![1] = ""
- }
-
- }
|