Swiftui 中未填充自定义形状
Custom shape not being filled in Swifftui
我有一个要求,我需要覆盖自定义形状,其中一个被填充。这是我的应用程序中重复出现的模式,因此我选择重构代码并传递填充颜色。为了简单起见,我使用了三角形和正方形。我的自定义形状更复杂。这是代码:
struct ContentView: View {
var body: some View {
ShapeView(lineWidth: 1, fillColor: .blue)
.padding()
}
}
struct ShapeView: View {
let lineWidth: CGFloat
let fillColor: Color
var body: some View {
ZStack {
Square()
.stroke(lineWidth:lineWidth)
Triangle()
.stroke(lineWidth:lineWidth)
.fill(fillColor)
}
.frame(width: 200, height: 200, alignment: .center)
}
}
struct Triangle: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: rect.midX, y: rect.minY))
path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.midX, y: rect.minY))
path.closeSubpath()
return path
}
}
struct Square: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: rect.minX, y: rect.minY))
path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
path.addLine(to: CGPoint(x: rect.minX, y: rect.minY))
path.closeSubpath()
return path
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
三角形应该被填充,但实际上没有。为什么没有填满?
您只需填写即可:
struct ShapeView: View {
let lineWidth: CGFloat
let fillColor: Color
var body: some View {
ZStack {
Square()
.stroke(lineWidth:lineWidth)
Triangle()
.fill(fillColor) // <<: Here!
}
.frame(width: 200, height: 200, alignment: .center)
}
}
我有一个要求,我需要覆盖自定义形状,其中一个被填充。这是我的应用程序中重复出现的模式,因此我选择重构代码并传递填充颜色。为了简单起见,我使用了三角形和正方形。我的自定义形状更复杂。这是代码:
struct ContentView: View {
var body: some View {
ShapeView(lineWidth: 1, fillColor: .blue)
.padding()
}
}
struct ShapeView: View {
let lineWidth: CGFloat
let fillColor: Color
var body: some View {
ZStack {
Square()
.stroke(lineWidth:lineWidth)
Triangle()
.stroke(lineWidth:lineWidth)
.fill(fillColor)
}
.frame(width: 200, height: 200, alignment: .center)
}
}
struct Triangle: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: rect.midX, y: rect.minY))
path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.midX, y: rect.minY))
path.closeSubpath()
return path
}
}
struct Square: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: rect.minX, y: rect.minY))
path.addLine(to: CGPoint(x: rect.minX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY))
path.addLine(to: CGPoint(x: rect.minX, y: rect.minY))
path.closeSubpath()
return path
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
三角形应该被填充,但实际上没有。为什么没有填满?
您只需填写即可:
struct ShapeView: View {
let lineWidth: CGFloat
let fillColor: Color
var body: some View {
ZStack {
Square()
.stroke(lineWidth:lineWidth)
Triangle()
.fill(fillColor) // <<: Here!
}
.frame(width: 200, height: 200, alignment: .center)
}
}