Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swiftui 如何修改已绘制的路径?_Swiftui - Fatal编程技术网

Swiftui 如何修改已绘制的路径?

Swiftui 如何修改已绘制的路径?,swiftui,Swiftui,所以我可以看到线条。行数由用户的输入决定。我知道如何创建线条以及如何使用不同效果渲染这些线条。。但是如何修改已经创建的行呢 例如,我想让第二条画线在中间有一个折断,也许是一个用户点击按钮。 下面是一些复制最少的代码 import SwiftUI struct ContentView: View { @State private var path = Path() @State private var horizontalLines = 0 var body: some

所以我可以看到线条。行数由用户的输入决定。我知道如何创建线条以及如何使用不同效果渲染这些线条。。但是如何修改已经创建的行呢

例如,我想让第二条画线在中间有一个折断,也许是一个用户点击按钮。

下面是一些复制最少的代码

import SwiftUI

struct ContentView: View {
    @State private var path = Path()
    @State private var horizontalLines = 0

    var body: some View {
        GeometryReader { geo in
            VStack {
                Draw(path: $path)
                    .stroke()
                    .clipped()
                    .padding()
                HorizontalLine(path: $path, horizontalLines: $horizontalLines, rect: geo.frame(in: .local))
            }
        }
    }
    private func addLine() {
        path.addEllipse(in: path.boundingRect)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

struct Draw: Shape {
    @Binding var path: Path
    func path(in rect: CGRect) -> Path {
        var path = path
        path.addRect(rect)
        return path
    }
}

struct HorizontalLine: View {
    @Binding var path: Path
    @Binding var horizontalLines: Int
    let rect: CGRect
    var verticalOffset: CGFloat {
        let height = rect.size.height
        let tenths = height / 10
        return tenths * CGFloat(horizontalLines)
    }
    var body: some View {
        Button("Add Horizontal Lines") {
            path = addHLine()
        }
    }
    private func addHLine() -> Path {
        var path = path
        path.move(to: CGPoint(x: rect.minX + 50, y: verticalOffset))
        path.addLine(to: CGPoint(x: rect.maxX - 75 , y: verticalOffset))
        self.horizontalLines += 1
        return path
    }
}

无法编辑
路径
/
CGPath
。您必须复制并重新创建它。@George_E然后是否可以通过修改某一行来复制并重新创建路径?我认为最简单的解决方案是使用
horizontalLines
调用您的
addHLine
函数,然后将其重置为
0
。如果horizontalLines==1,则选中
,然后以稍微不同的方式绘制线,即绘制两条单独的线。