我试着画出这只飞快的鸟,画出了下面的形状.
struct SwiftBird: Shape {
func path(in rect: CGRect) -> Path {
let size = min(rect.width, rect.height)
let path = Path { path in
path.move(to: CGPoint(x: 0.565 * size, y: 0.145 * size))
path.addQuadCurve(to: CGPoint(x: 0.79 * size, y: 0.62 * size), control: CGPointMake(0.85 * size, 0.34 * size))
path.move(to: CGPoint(x: 0.79 * size, y: 0.62 * size))
path.addQuadCurve(to: CGPoint(x: 0.845 * size, y: 0.825 * size), control: CGPointMake(0.88 * size, 0.75 * size))
path.move(to: CGPoint(x: 0.1 * size, y: 0.58 * size))
path.addQuadCurve(to: CGPoint(x: 0.5 * size, y: 0.82 * size), control: CGPointMake(0.25 * size, 0.8 * size))
path.addQuadCurve(to: CGPoint(x: 0.67 * size, y: 0.775 * size), control: CGPointMake(0.6 * size, 0.82 * size))
path.addQuadCurve(to: CGPoint(x: 0.845 * size, y: 0.825 * size), control: CGPointMake(0.78 * size, 0.715 * size))
path.move(to: CGPoint(x: 0.1 * size, y: 0.58 * size))
path.addQuadCurve(to: CGPoint(x: 0.525 * size, y: 0.63 * size), control: CGPointMake(0.325 * size, 0.735 * size))
path.move(to: CGPoint(x: 0.175 * size, y: 0.25 * size))
path.addQuadCurve(to: CGPoint(x: 0.525 * size, y: 0.63 * size), control: CGPointMake(0.305 * size, 0.445 * size))
path.move(to: CGPoint(x: 0.175 * size, y: 0.25 * size))
path.addQuadCurve(to: CGPoint(x: 0.475 * size, y: 0.475 * size), control: CGPointMake(0.36 * size, 0.405 * size))
path.move(to: CGPoint(x: 0.26 * size, y: 0.205 * size))
path.addQuadCurve(to: CGPoint(x: 0.475 * size, y: 0.475 * size), control: CGPointMake(0.4 * size, 0.405 * size))
path.move(to: CGPoint(x: 0.26 * size, y: 0.205 * size))
path.addQuadCurve(to: CGPoint(x: 0.63 * size, y: 0.505 * size), control: CGPointMake(0.465 * size, 0.405 * size))
path.move(to: CGPoint(x: 0.565 * size, y: 0.145 * size))
path.addQuadCurve(to: CGPoint(x: 0.63 * size, y: 0.505 * size), control: CGPointMake(0.7 * size, 0.355 * size))
}
return path
}
}
我在另一个视图中添加了鸟的图形并设置了动画,如下所示:
struct TestView: View {
@State private var percentage: CGFloat = 0
var body: some View {
ZStack {
Color(.black)
SwiftBird()
.trim(from: 0, to: percentage)
.stroke(Color.white, style: StrokeStyle(lineWidth: 1, lineCap: .round, lineJoin: .round))
.frame(width: 100, height: 100)
.animation(.easeInOut(duration: 5.0), value: percentage)
.onAppear {
self.percentage = 1.0
}
}
}
}
一旦完成了路径的绘制,我想用 colored颜色 填充形状.然而,如果我对形状应用.fill(Color.orange)
修改器,它不会正确填充内部的形状.我能够看到形状内部的黑色区域,而且 colored颜色 也超过了路径.我如何才能实现动画的色彩填充?如有任何帮助,我们不胜感激.