0

2 つのビューを含む HStack を含むビューがあります。右側のビューにはグラフが含まれています。左側のビューには、グラフ YAxis のラベルが含まれています。グラフを親ビューの中央に配置したいと思います。誰かがこれを達成するために正しい方向に私を向けることができれば、それはありがたいです. 以下は私のコードです。

よろしく、

クリス

import SwiftUI
struct MainView: View {
    @EnvironmentObject var viewModel : ViewModel
    var body: some View {
        VStack (alignment: .center) {
            let maxYValue = viewModel.data.max { $0.Value < $1.Value }?.Value
            let minYValue = viewModel.data.max { $0.Value > $1.Value }?.Value
            let deltaY = maxYValue! - minYValue!
            let maxYVal = Int(round(maxYValue!))
            let minYVal = Int(round(minYValue!))
            HStack{
                VStack{
                    Text(String("\(maxYVal)"))
                    Spacer()
                    Text("2")
                    Spacer()
                    Text("3")
                    Spacer()
                    Text("3")
                    Spacer()
                    Text(String("\(minYVal)"))
                }.frame(width: 100, height: 510, alignment: .trailing)
                GeometryReader { geometry in
                    Path { path in
                        for index in viewModel.data.indices {
                            let xPosition = ((geometry.size.width) / (CGFloat(viewModel.data.count - 1))) * CGFloat(index + 0)
                            let yPosition =  (1 - (CGFloat(viewModel.data[index].Value - minYValue!)) / CGFloat(deltaY) ) * (geometry.size.height)
                            if index == 0 {
                                path.move(to: CGPoint(x : xPosition, y : yPosition))
                            }
                            path.addLine(to: CGPoint(x : xPosition, y: yPosition))
                        }
                    } .stroke(Color.blue, style: StrokeStyle(lineWidth: 2, lineCap: .round, lineJoin: .round))
                    Path { path in
                        path.move(to: CGPoint(x: 0, y: geometry.size.height))
                        path.addLine(to: CGPoint(x: 0, y: 0))
                        path.move(to: CGPoint(x: 0, y: geometry.size.height))
                        path.addLine(to: CGPoint(x: geometry.size.width, y: geometry.size.height))
                    }.stroke(Color.black, style: StrokeStyle(lineWidth: 2))
                    Path { path in
                        for index in 0...3 {
                            path.move(to: CGPoint(x: 0 , y: geometry.size.height * CGFloat(index) / 4))
                            path.addLine(to: CGPoint(x: geometry.size.width , y: geometry.size.height * CGFloat(index) / 4))
                        }
                    }.stroke(Color.gray, style: StrokeStyle(lineWidth: 0.5))
                } // end geometry reader
                .frame(width: 700, height: 500)// end inner geometry reader
            }
        } // end of vstack
    }
}
4

1 に答える 1