Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何对称平滑UIBezierPath中的曲线_Swift_Uibezierpath - Fatal编程技术网

Swift 如何对称平滑UIBezierPath中的曲线

Swift 如何对称平滑UIBezierPath中的曲线,swift,uibezierpath,Swift,Uibezierpath,我正在使用UIBezierPath用Swift编写一个自定义组件,我面临着正确找到控制点以创建一个圆的完美路径的困难。请查看下面的组件: 请注意,在蓝色圆圈区域,圆圈没有完全跟随黄色球,我试图将控制点设置到正确的位置,但结果不理想: 用于描述上述路径的函数部分如下: //私人出租魔术_编号:CGFloat=0.552284749831 私人出租魔术_编号:CGFloat=0.5 //... 设secondPointEnd:CGPoint=CGPoint(x:middleft.x+ballR

我正在使用
UIBezierPath
用Swift编写一个自定义组件,我面临着正确找到控制点以创建一个圆的完美路径的困难。请查看下面的组件:

请注意,在蓝色圆圈区域,圆圈没有完全跟随黄色球,我试图将控制点设置到正确的位置,但结果不理想:

用于描述上述路径的函数部分如下:


//私人出租魔术_编号:CGFloat=0.552284749831
私人出租魔术_编号:CGFloat=0.5
//...
设secondPointEnd:CGPoint=CGPoint(x:middleft.x+ballRadius/2,y:middleft.y+ballRadius/2)
path.addCurve(
致:secondPointEnd,
控制点1:CGPoint(x:firstPointEnd.x,y:secondPointEnd.y-(球半径*幻数)),
控制点2:CGPoint(x:firstPointEnd.x,y:secondPointEnd.y))
让第三个点开始:CGPoint=CGPoint(x:secondPointEnd.x+ballRadius/2,y:secondPointEnd.y-ballRadius/2)
path.addCurve(
致:第三点开始,
控制点1:CGPoint(x:thirdPointStart.x,y:secondPointEnd.y),
控制点2:CGPoint(x:thirdPointStart.x,y:secondPointEnd.y-(球半径*幻数)))
有关完整的源代码(请参阅):

我尝试用多种配置修复它,但到目前为止没有成功,我还尝试应用神奇的数字
0.552284749831
,但它使情况变得更糟。我是否缺少一些控制点配置?是否存在任何无效的控制点

你们能帮我找出贝塞尔路径的毛病吗

问候,

佩德罗

在@Bob的帮助下,我能够完成他描述的
UIBezierPath


我不建议使用beziers渲染圆形位。他们非常接近,但不在同一地点。对于矩形(或任何多边形)的圆角来说,这是一个很好的近似值,但对于路径的真正圆形部分,您应该使用它


如果需要,可以使用引入和引出圆弧的Bezier,但对于圆形部分,请使用圆弧。例如,请参见。

请更新您的游乐场代码。。它只显示黑色视图,并带有约束…@jawadAli完成,复制并粘贴。我使用的是Xcode 11.4.1.yep,它可以正常工作now@Rob分类!你能把这个转换成一个答案吗?谢谢你,这个例子太棒了,效果很好。