Path 如何在SwiftUI中组合形状?

Path 如何在SwiftUI中组合形状?,path,swiftui,shapes,Path,Swiftui,Shapes,我需要从其他几个形状创建一个形状,理想情况下,我会在最后得到一个单一的形状结构,它会像ZStack一样堆叠两个形状。我还没有注意到任何地方有明显的实现,所以也许有人对如何实现它有一些想法 以下是我想要的: 结构自定义形状:形状{ func pathin rect:CGRect->Path{ //在此处添加形状??例如,将矩形与圆形结合起来? } } 您可以使用func addPath\upath:path,transform:CGAffineTransform=.identity创建如下新形状:

我需要从其他几个形状创建一个形状,理想情况下,我会在最后得到一个单一的形状结构,它会像ZStack一样堆叠两个形状。我还没有注意到任何地方有明显的实现,所以也许有人对如何实现它有一些想法

以下是我想要的:

结构自定义形状:形状{ func pathin rect:CGRect->Path{ //在此处添加形状??例如,将矩形与圆形结合起来? } } 您可以使用func addPath\upath:path,transform:CGAffineTransform=.identity创建如下新形状:

结构自定义形状:形状{ func pathin rect:CGRect->Path{ var customShape=路径{p in p、 移动到:CGPointx:0,y:0 p、 addQuadCurveto:CGPointx:0,y:100, 控件:CGPointx:0,y:0 p、 添加曲线到:CGPointx:100,y:400, 控件1:CGPointx:0,y:200, 控件2:CGPointx:100,y:200 p、 添加曲线到:CGPointx:200,y:100, 控件1:CGPointx:100,y:200, 控件2:CGPointx:200,y:200 p、 addQuadCurveto:CGPointx:200,y:0, 控件:CGPointx:200,y:0 } 设矩形=矩形 .pathin:customShape.boundingRect .offsetBydx:100,dy:0 customShape.addPathrectangle,转换:.initscaleX:0.5,y:0.35 返回自定义形状 } } 然后像这样使用它:

结构快捷视图:视图{ var body:一些观点{ 自定义形状 } } 您可以使用func addPath\upath:path,transform:CGAffineTransform=.identity创建如下新形状:

结构自定义形状:形状{ func pathin rect:CGRect->Path{ var customShape=路径{p in p、 移动到:CGPointx:0,y:0 p、 addQuadCurveto:CGPointx:0,y:100, 控件:CGPointx:0,y:0 p、 添加曲线到:CGPointx:100,y:400, 控件1:CGPointx:0,y:200, 控件2:CGPointx:100,y:200 p、 添加曲线到:CGPointx:200,y:100, 控件1:CGPointx:100,y:200, 控件2:CGPointx:200,y:200 p、 addQuadCurveto:CGPointx:200,y:0, 控件:CGPointx:200,y:0 } 设矩形=矩形 .pathin:customShape.boundingRect .offsetBydx:100,dy:0 customShape.addPathrectangle,转换:.initscaleX:0.5,y:0.35 返回自定义形状 } } 然后像这样使用它:

结构快捷视图:视图{ var body:一些观点{ 自定义形状 } }
这不是你正在创建的形状的实现,你正在创建一个View@NicolasMandica是正确的,但我不清楚的是,您可以访问和修改SwiftUI的内置形状路径。要组合矩形和圆,请在路径闭包中:let Rectangle=Rectangle.pathin:rect.applyingCGAffineTransformscaleX:1,y:0.5 var Circle=Circle.pathin:rect Circle.addPathrectangle path=Circle这不是要创建的形状的实现,而是要创建一个View@NicolasMandica是对的,,但我不清楚的是,您可以访问和修改SwiftUI的内置形状路径。要组合矩形和圆,请在路径闭包中:let Rectangle=Rectangle.pathin:rect.applyingCGAffineTransformscaleX:1,y:0.5 var Circle=Circle.pathin:rect Circle.addPathrectangle path=Circle