StatsView.swift 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //
  2. // StatsView.swift
  3. // LoopFollow
  4. //
  5. // Created by Jon Fawcett on 6/23/20.
  6. // Copyright © 2020 Jon Fawcett. All rights reserved.
  7. //
  8. import Foundation
  9. import Charts
  10. import UIKit
  11. extension MainViewController {
  12. func updateStats()
  13. {
  14. if bgData.count > 0 {
  15. var lastDayOfData = bgData
  16. let graphHours = 24 * UserDefaultsRepository.downloadDays.value
  17. // If we loaded more than 1 day of data, only use the last day for the stats
  18. if graphHours > 24 {
  19. let oneDayAgo = dateTimeUtils.getTimeIntervalNHoursAgo(N: 24)
  20. var startIndex = 0
  21. while startIndex < bgData.count && bgData[startIndex].date < oneDayAgo {
  22. startIndex += 1
  23. }
  24. lastDayOfData = Array(bgData.dropFirst(startIndex))
  25. }
  26. let stats = StatsData(bgData: lastDayOfData)
  27. statsLowPercent.text = String(format:"%.1f%", stats.percentLow) + "%"
  28. statsInRangePercent.text = String(format:"%.1f%", stats.percentRange) + "%"
  29. statsHighPercent.text = String(format:"%.1f%", stats.percentHigh) + "%"
  30. statsAvgBG.text = Localizer.toDisplayUnits(String(format:"%.0f%", stats.avgBG))
  31. if UserDefaultsRepository.useIFCC.value {
  32. statsEstA1C.text = String(format:"%.0f%", stats.a1C)
  33. }
  34. else
  35. {
  36. statsEstA1C.text = String(format:"%.1f%", stats.a1C)
  37. }
  38. statsStdDev.text = String(format:"%.2f%", stats.stdDev)
  39. createStatsPie(pieData: stats.pie)
  40. }
  41. }
  42. func createStatsPie(pieData: [DataStructs.pieData]) {
  43. statsPieChart.legend.enabled = false
  44. statsPieChart.drawEntryLabelsEnabled = false
  45. statsPieChart.drawHoleEnabled = false
  46. statsPieChart.rotationEnabled = false
  47. var chartEntry = [PieChartDataEntry]()
  48. var colors = [NSUIColor]()
  49. for i in 0..<pieData.count{
  50. var slice = Double(pieData[i].value)
  51. if slice == 0 { slice = 0.1 }
  52. let value = PieChartDataEntry(value: slice)
  53. chartEntry.append(value)
  54. if pieData[i].name == "high" {
  55. colors.append(NSUIColor.systemYellow)
  56. } else if pieData[i].name == "low" {
  57. colors.append(NSUIColor.systemRed)
  58. } else {
  59. colors.append(NSUIColor.systemGreen)
  60. }
  61. }
  62. let set = PieChartDataSet(entries: chartEntry, label: "")
  63. set.drawIconsEnabled = false
  64. set.sliceSpace = 2
  65. set.drawValuesEnabled = false
  66. set.valueLineWidth = 0
  67. set.formLineWidth = 0
  68. set.sliceSpace = 0
  69. set.colors.removeAll()
  70. if colors.count > 0 {
  71. for i in 0..<colors.count{
  72. set.addColor(colors[i])
  73. }
  74. }
  75. let data = PieChartData(dataSet: set)
  76. statsPieChart.data = data
  77. }
  78. }