是否可以在 UIDynamicKit 中模拟对象/ UIView 的重力?

Posted

技术标签:

【中文标题】是否可以在 UIDynamicKit 中模拟对象/ UIView 的重力?【英文标题】:Is it possible to simulate gravity to an object / UIView in UIDynamicKit? 【发布时间】:2017-01-05 18:47:02 【问题描述】:

不使用 SpriteKit,是否可以模拟 UIView 对象的重力?我想要实现的是一个中心 UIView,其他对象漂浮在它周围。几乎就像围绕太阳的行星。并让它从中心物体吸引和排斥。

我知道您可以向超级视图添加水平和垂直重力。

谢谢!

【问题讨论】:

【参考方案1】:

解决方法是使用 UIAttachmentBehavior。

let attachment = UIAttachmentBehavior(item: node, attachedTo: self.ownerNode)

            self.animator.addBehavior(attachment)

以上代码将节点对象附加到 self.ownerNode。我还在 self.ownerNode 中添加了 UISnapBehavior,这样当拖离中心时,self.ownerNode 将始终快速回到中心,并且所有其他节点都跟随它。

let snapCenter = UISnapBehavior(item: self.ownerNode, snapTo: self.view.center)
            self.animator.addBehavior(snapCenter)

【讨论】:

【参考方案2】:

另一种方法:使用字段。

我认为,UIKit Dynamics 在 ios 9 左右的某个时候将字段带到了桌面上。

场为其... 影响范围内的所有位置提供相同、相似或独特的“力”向量。因此得名。

您可以切换一个场,让它在某个时刻推动,在另一个时刻拉动,甚至可以将它们组合、分层并在影响区域中将它们围绕屏幕对齐。

单个场可以像行星引力一样作用于屏幕中间,使卫星围绕它移动、落入其中或被击退。

字段是 UIKit Dynamics 的一个非常强大的功能,无论是在创造力还是影响力方面。它们也非常有效,因为它们只对您规定受它们影响的那些事情采取行动。因此,尽管它们的场大小可能很大,并且它们确定位置影响的功能很复杂,但它们仍然非常有效。

您可以在这里阅读/观看/收听更多关于它们的信息:

https://developer.apple.com/videos/play/wwdc2015/229/

【讨论】:

以上是关于是否可以在 UIDynamicKit 中模拟对象/ UIView 的重力?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 EasyMock 创建一个实现多个接口的模拟对象?

23_迭代器模拟For循环

是否有可能使用 PHPUnit 模拟对象来调用一个神奇的 __call() 方法?

使用Moq模拟IList.Add

在 Jest 中模拟全局变量

用 konva 图像模拟 <img> 对象拟合/对象位置属性的最佳策略