Гистограмма не будет работать с отрицательными значениями y в Swift - PullRequest
2 голосов
/ 11 июля 2020

Я пытаюсь создать гистограмму, которая работает с отрицательными значениями y. В настоящее время, когда я ввожу отрицательные значения, это не работает должным образом, я не могу понять это.

Прямо сейчас я думаю, что когда есть отрицательное значение, я изменю выравнивание полоса так, чтобы она начиналась с этого значения (например, если процент равен -50, полоса будет выровнена по -50 так, чтобы кончик касался оси x), но я не уверен, как это сделать.

Вот код:

import SwiftUI

struct ContentView: View {
      var body: some View {
          
       HStack(alignment: .bottom, spacing: 8){
              
              ForEach(percents){i in
                  
                  Bar(percent: i.percent,day: i.day)
              }
              
          }.frame(height: 250)
      }
  }
  
  struct ContentView_Previews: PreviewProvider {
      static var previews: some View {
          ContentView()
      }
  }
  
  struct Bar : View {
      
      var percent : CGFloat = 0
      var day = ""
      
      var body : some View{
          
          VStack{
              
              Text(String(format: "%.0f", Double(percent)) + "%").foregroundColor(Color.black.opacity(0.5))
              
              Rectangle().fill(Color.red).frame(width: UIScreen.main.bounds.width / 7 - 12, height: getHeight())
              
              Text(day).foregroundColor(Color.black.opacity(0.5))
          }
          
      }
      
      func getHeight()->CGFloat{
          
          return 200 / 100 * percent
      }
  }
  
  
  // Sample Datas....
  
  struct type : Identifiable {
      
      var id : Int
      var percent :CGFloat
      var day : String
  }
  
  
  var percents = [
  type(id: 0, percent: -20, day: "Mon"),
  type(id: 1, percent: 50, day: "Tue"),
  type(id: 2, percent: -80, day: "Wed"),
  type(id: 3, percent: 60, day: "Thu"),
  type(id: 4, percent: 90, day: "Fri"),
  type(id: 5, percent: 100, day: "Sat"),
  type(id: 6, percent: -100, day: "Sun")
...