如何在SwiftUI中为自定义路径绘制笔划?

如何在SwiftUI中为自定义路径绘制笔划?,swiftui,Swiftui,我在SwiftUI中创建一个自定义路径,并将其填充为红色,我想为我的路径指定一个边框或笔划。我们如何做到这一点 首先声明一个自定义的形状。您只需实现func路径(在rect:CGRect中)->path: struct Diamond: Shape { func path(in rect: CGRect) -> Path { let topMid = CGPoint(x: rect.midX, y: rect.minY) let trailingM

我在SwiftUI中创建一个自定义路径,并将其填充为红色,我想为我的路径指定一个边框或笔划。我们如何做到这一点


首先声明一个自定义的
形状
。您只需实现
func路径(在rect:CGRect中)->path

struct Diamond: Shape {
    func path(in rect: CGRect) -> Path {
        let topMid = CGPoint(x: rect.midX, y: rect.minY)
        let trailingMid = CGPoint(x: rect.maxX, y: rect.midY)
        let bottomMid = CGPoint(x: rect.midX, y: rect.maxY)
        let leadingMid = CGPoint(x: rect.minX, y: rect.midY)
        var path = Path()
        path.move(to: topMid)
        path.addLine(to: trailingMid)
        path.addLine(to: bottomMid)
        path.addLine(to: leadingMid)
        path.addLine(to: topMid)
        return path
    }
}
然后,您可以在
ZStack
中放置:您的背景剪裁到您的自定义形状,以及应用笔划的自定义形状:

struct ContentView: View {

    var body: some View {
        ZStack {
            Color.blue
                .clipShape(Diamond())
            Diamond()
                .stroke(Color.purple, lineWidth: 4)
        }   .padding()
    }
 }

首先声明一个自定义
形状
。您只需实现
func路径(在rect:CGRect中)->path

struct Diamond: Shape {
    func path(in rect: CGRect) -> Path {
        let topMid = CGPoint(x: rect.midX, y: rect.minY)
        let trailingMid = CGPoint(x: rect.maxX, y: rect.midY)
        let bottomMid = CGPoint(x: rect.midX, y: rect.maxY)
        let leadingMid = CGPoint(x: rect.minX, y: rect.midY)
        var path = Path()
        path.move(to: topMid)
        path.addLine(to: trailingMid)
        path.addLine(to: bottomMid)
        path.addLine(to: leadingMid)
        path.addLine(to: topMid)
        return path
    }
}
然后,您可以在
ZStack
中放置:您的背景剪裁到您的自定义形状,以及应用笔划的自定义形状:

struct ContentView: View {

    var body: some View {
        ZStack {
            Color.blue
                .clipShape(Diamond())
            Diamond()
                .stroke(Color.purple, lineWidth: 4)
        }   .padding()
    }
 }

您需要分别笔划和填充路径。这里有一种方法

将您的路径指定给一个变量,然后使用该变量填充它,然后使用相同的笔划路径覆盖它。注意:您需要使用
path.closeSubpath()
关闭路径,否则只会划弧

struct ContentView: View
{
    var body: some View {
        let path = Path { path in
            path.addArc(center: CGPoint(x: 100, y: 300), radius: 200, startAngle: Angle(degrees: -90), endAngle: Angle(degrees: 0), clockwise: false)
            path.closeSubpath()
        }
        path.fill(Color.red).overlay(path.stroke(Color.black, lineWidth: 2))
    }
}


您需要分别笔划和填充路径。这里有一种方法

将您的路径指定给一个变量,然后使用该变量填充它,然后使用相同的笔划路径覆盖它。注意:您需要使用
path.closeSubpath()
关闭路径,否则只会划弧

struct ContentView: View
{
    var body: some View {
        let path = Path { path in
            path.addArc(center: CGPoint(x: 100, y: 300), radius: 200, startAngle: Angle(degrees: -90), endAngle: Angle(degrees: 0), clockwise: false)
            path.closeSubpath()
        }
        path.fill(Color.red).overlay(path.stroke(Color.black, lineWidth: 2))
    }
}


谢谢,我们如何使笔划线的起点和终点圆整?
path.fill(Color.red)。overlay(path.stroke(样式:StrokeStyle(线宽:10,lineCap:.round,lineJoin:.round))
谢谢,我们如何使笔划线的起点和终点圆整?
path.fill(Color.red)。overlay(样式:StrokeStyle:StrokeStyle(线宽:10,线帽:。圆形,线连接:。圆形)))