iOS中的Gooey效果

时间:2017-01-28 13:16:41

标签: ios animation

我正在开展一个小项目,我希望通过一个粘性效果连接两个圆圈。我在网上安静地搜索了很多内容,并以标签栏或侧边栏菜单的形式发现了一些例子,但这些都是固定的,而不是我正在寻找的内容。

我基本上想要的是following。所以有一个圆圈,如果我将它紧紧地拖到另一个圆圈上,它会合在一起,也称为粘性效应。

代码示例是最好的,但是如何做到这一点的方向/方法也会帮助我。

1 个答案:

答案 0 :(得分:3)

有趣的问题。

脱离我的脑海,这就是我如何处理它:

计算2个圆圈的交点(我找到了这个链接:Circle-circle intersection points

计算每个圆的交叉部分的弧度范围。

将这些弧度范围扩大几度。为每个圆的剩余部分定义弧(将绘制的部分"非粘性")

使用trig和Catmull-Rom splines,为外部" non-gooey"创建一个封闭的路径。每个圆圈的部分。

Catmull-Rom算法应使用平滑曲线填充2个圆形圆之间的间隙,这些曲线看起来很像" Gooey"你展示的圈子。

我在github上有一个项目,其中包含用于从一系列点创建Catmull-Rom样条线的Swift代码:Trochoid demo

该项目创建开放曲线,而不是封闭路径。使用Catmull-Rom Splines创建平滑闭合路径的技术略有不同。我有另一个名为RandomBlobs的Github项目(用Objective-C编写),它创建了平滑的闭合路径。您应该能够找出如何更改Swift代码以从Objective-C代码创建封闭路径。自从我编写了RandomBlobs代码以来,它已经足够长了,我不记得我做了什么。

我不确定我上面描述的方法是否足够快以实时绘制,但我打赌它会。那个TrochoidDemo项目正在为每个动画帧做一个很多的触发,它的动画非常流畅。如果您的项目不够顺畅,您可能需要进行一些优化。