Ios 迅捷可以';不能使多行路径工作

Ios 迅捷可以';不能使多行路径工作,ios,xcode,swiftui,Ios,Xcode,Swiftui,我真的很难使用SwiftUI路径函数。我想买一张单人床 一年中每天温度的垂直线。线的顶点是 一天的高温和最低点是一天的低温 我甚至看到了雷·温德利希的例子,这是一个灵感,但我根本无法得到 这很难奏效。 在经历了很多挫折之后,我创建了这个简单的代码来测试(并证明问题已经解决) 不是我的解码数据) struct ContentView:View{ @国家私有变量things365:[事物]=[] 让myGradient=渐变(颜色:[ 颜色(#colorLiteral(红色:0.545098039

我真的很难使用SwiftUI路径函数。我想买一张单人床 一年中每天温度的垂直线。线的顶点是 一天的高温和最低点是一天的低温

我甚至看到了雷·温德利希的例子,这是一个灵感,但我根本无法得到 这很难奏效。

在经历了很多挫折之后,我创建了这个简单的代码来测试(并证明问题已经解决) 不是我的解码数据)

struct ContentView:View{
@国家私有变量things365:[事物]=[]
让myGradient=渐变(颜色:[
颜色(#colorLiteral(红色:0.5450980392,绿色:0,蓝色:0,阿尔法:1)),
颜色(#colorLiteral(红色:0.7450980544,绿色:0.1568627506,蓝色:0.07450980693,α:1)),
颜色(#colorLiteral(红色:0.1176470588,绿色:0.5647058824,蓝色:1,阿尔法:1)),
颜色(#colorLiteral(红色:0,绿色:0,蓝色:0.5450980392,阿尔法:1)),
黄先生,
颜色(#colorLiteral(红色:1,绿色:0.5490196078,蓝色:0,阿尔法:1)),
颜色(#colorLiteral(红色:0,绿色:0.7647058824,蓝色:1,阿尔法:1)),
颜色(#colorLiteral(红色:0.5294117647,绿色:0.8078431373,蓝色:0.9803921569,α:1)),
])
var body:一些观点{
ZStack{
VStack(对齐:。前导){
文本(“显示路径”)
//把其他数据放在这里
HStack{
ForEach(things365,id:\.self){t in
路径{p in
p、 移动(到:CGPoint(x:t.inc,y:CGFloat((t.maxt作为NSString.doubleValue)))
p、 addLine(to:CGPoint(x:t.inc,y:CGFloat((t.mint作为NSString.doubleValue)+500))
}
.stroke(线性渐变(渐变:self.myGradient,起始点:单位点(x:0.0,y:1.0),终点:单位点(x:0.0,y:0.0)))
}
.框架(宽度:1)
}
}
}
.框架(宽:365,高:600)
奥纳佩尔先生{
self.makeThings()
}
}
//模拟一年的温度数据
func makeThings(){
对于1…365中的x{

让t=Thing(maxt:String(Int.random)(in:70..我将提出以下备选方案-使模型更方便,并使用矩形代替路径,还有一些修正(因为我们有反向坐标)

struct TestTempGraph:View{
@国家私有变量things365:[事物]=[]
让myGradient=渐变(颜色:[
颜色(#colorLiteral(红色:0.5450980392,绿色:0,蓝色:0,阿尔法:1)),
颜色(#colorLiteral(红色:0.7450980544,绿色:0.1568627506,蓝色:0.07450980693,α:1)),
颜色(#colorLiteral(红色:0.1176470588,绿色:0.5647058824,蓝色:1,阿尔法:1)),
颜色(#colorLiteral(红色:0,绿色:0,蓝色:0.5450980392,阿尔法:1)),
黄先生,
颜色(#colorLiteral(红色:1,绿色:0.5490196078,蓝色:0,阿尔法:1)),
颜色(#colorLiteral(红色:0,绿色:0.7647058824,蓝色:1,阿尔法:1)),
颜色(#colorLiteral(红色:0.5294117647,绿色:0.8078431373,蓝色:0.9803921569,α:1)),
])
让plotHeight=CGFloat(600)
var body:一些观点{
ZStack{
VStack(对齐:。前导){
文本(“显示路径”)
//把其他数据放在这里
HStack(间距:0){
ForEach(things365,id:\.self){t in
矩形()
.stroke(线性渐变(渐变:self.myGradient,起始点:单位点(x:0.0,y:0.0),终点:单位点(x:0.0,y:1.0)))
.框架(宽度:1,高度:t.maxt-t.mint)
.位置(y:plotHeight-t.mint-(t.maxt-t.mint)/2.0)
}
}
.框架(宽度:365,高度:绘图高度)
}
}
奥纳佩尔先生{
self.makeThings()
}
}
//模拟一年的温度数据
func makeThings(){
对于1…365中的x{

让t=Thing(maxt:CGFloat.random(in:70..将你的
HStack
间距设置为零。
HStack(间距:0)
.Wow.难以置信的简单。这很有效。你可以设置笔划的
线宽:
。笔划(LinearGradient:self.myGradient,起始点:单位点(x:0.0,y:1.0),端点:单位点(x:0.0,y:0.0)),lineWidth:2.0)
@user2698617我很高兴它能帮上忙。我喜欢这个主意。我需要稍微玩弄一下数学。我版本的编译器使用了.position修饰符,我希望视图的图表百分比大约为2/3。
struct ContentView: View {
    @State private var things365: [Thing] = []
    let myGradient = Gradient(colors: [
        Color(#colorLiteral(red: 0.5450980392, green: 0, blue: 0, alpha: 1)),
        Color(#colorLiteral(red: 0.7450980544, green: 0.1568627506, blue: 0.07450980693, alpha: 1)),
        Color(#colorLiteral(red: 0.1176470588, green: 0.5647058824, blue: 1, alpha: 1)),
        Color(#colorLiteral(red: 0, green: 0, blue: 0.5450980392, alpha: 1)),
        .yellow,
        Color(#colorLiteral(red: 1, green: 0.5490196078, blue: 0, alpha: 1)),
        Color(#colorLiteral(red: 0, green: 0.7647058824, blue: 1, alpha: 1)),
        Color(#colorLiteral(red: 0.5294117647, green: 0.8078431373, blue: 0.9803921569, alpha: 1)),
    ])

    var body: some View {
        ZStack {
            VStack(alignment: .leading) {
                Text("Show the Path")
                //put some other data here
                HStack  {
                    ForEach(things365, id: \.self) { t in
                        Path { p in
                            p.move(to: CGPoint(x: t.inc, y: CGFloat((t.maxt as NSString).doubleValue)))
                            p.addLine(to: CGPoint(x:t.inc, y: CGFloat((t.mint as NSString).doubleValue) + 500))
                        }
                        .stroke(LinearGradient(gradient: self.myGradient, startPoint: UnitPoint(x: 0.0, y: 1.0), endPoint: UnitPoint(x: 0.0, y: 0.0)))
                    }
                    .frame(width: 1)
                }
            }
        }
        .frame(width: 365, height: 600)
        .onAppear {
            self.makeThings()
        }
    }

    //simulate a years worth of temperature data
    func makeThings() {
        for x in 1...365 {
            let t = Thing(maxt: String(Int.random(in: 70..<110)), mint: String(Int.random(in: 0..<40)), inc: CGFloat(x))
            self.things365.append(t)
        }
    }
}

struct Thing: Hashable {
    let id = UUID()
    var maxt: String
    var mint: String
    var inc: CGFloat
}
struct TestTempGraph: View {
    @State private var things365: [Thing] = []
    let myGradient = Gradient(colors: [
        Color(#colorLiteral(red: 0.5450980392, green: 0, blue: 0, alpha: 1)),
        Color(#colorLiteral(red: 0.7450980544, green: 0.1568627506, blue: 0.07450980693, alpha: 1)),
        Color(#colorLiteral(red: 0.1176470588, green: 0.5647058824, blue: 1, alpha: 1)),
        Color(#colorLiteral(red: 0, green: 0, blue: 0.5450980392, alpha: 1)),
        .yellow,
        Color(#colorLiteral(red: 1, green: 0.5490196078, blue: 0, alpha: 1)),
        Color(#colorLiteral(red: 0, green: 0.7647058824, blue: 1, alpha: 1)),
        Color(#colorLiteral(red: 0.5294117647, green: 0.8078431373, blue: 0.9803921569, alpha: 1)),
    ])

    let plotHeight = CGFloat(600)

    var body: some View {
        ZStack {
            VStack(alignment: .leading) {
                Text("Show the Path")
                //put some other data here
                HStack(spacing: 0)  {
                    ForEach(things365, id: \.self) { t in
                        Rectangle()
                            .stroke(LinearGradient(gradient: self.myGradient, startPoint: UnitPoint(x: 0.0, y: 0.0), endPoint: UnitPoint(x: 0.0, y: 1.0)))
                            .frame(width: 1, height: t.maxt - t.mint)
                            .position(y: plotHeight - t.mint - (t.maxt - t.mint) / 2.0)
                    }
                }
                .frame(width: 365, height: plotHeight)
            }
        }
        .onAppear {
            self.makeThings()
        }
    }

    //simulate a years worth of temperature data
    func makeThings() {
        for x in 1...365 {
            let t = Thing(maxt: CGFloat.random(in: 70..<110), mint: CGFloat.random(in: 0..<40), inc: CGFloat(x))
            self.things365.append(t)
        }
    }
}

struct Thing: Hashable {
    let id = UUID()
    var maxt: CGFloat
    var mint: CGFloat
    var inc: CGFloat
}