如何在SwiftUI中为自定义路径绘制笔划?
我在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
首先声明一个自定义的
形状
。您只需实现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,线帽:。圆形,线连接:。圆形)))