UIBezierPath
(UIKIt) и Path
(SwiftUI) - это разные вещи ... Чтобы создать Path
, вы должны использовать его собственные инструменты. Далее, операция заливки (с градиентом или чем-либо еще) является операцией рисования, а не частью создания контура / фигуры.
Вот несколько примеров объединения с фигурами, заполненными градиентами. Протестировано с Xcode 11.4.
struct DemoShape1: Shape {
func path(in rect: CGRect) -> Path {
return Path { path in
path.addRect(rect)
}
}
}
struct DemoShape2: Shape {
func path(in rect: CGRect) -> Path {
return Path { path in
path.addArc(center: CGPoint(x: rect.midX, y: rect.midY), radius: rect.size.height/2, startAngle: Angle(degrees: 0), endAngle: Angle(degrees: 360), clockwise: true)
}
}
}
struct DemoCombinedShape: View {
var gradient1 = LinearGradient(gradient: Gradient(colors:[.blue, .yellow]), startPoint: .top, endPoint: .bottom)
var gradient2 = LinearGradient(gradient: Gradient(colors:[.red, .black]), startPoint: .leading, endPoint: .trailing)
var body: some View {
// both shapes are rendered in same coordinate space
DemoShape1().fill(gradient1)
.overlay(DemoShape2().fill(gradient2))
}
}
struct TestCombinedShape_Previews: PreviewProvider {
static var previews: some View {
DemoCombinedShape()
.frame(width: 400, height: 300)
}
}