10

如何在 a 的盘上进行碰撞检测UIDynamicItem

背景:我从一组颜色/字符串中随机生成 20 个标签(这部分对问题来说不是必需的),然后将它们添加到具有随机中心位置的主视图中。从那里,我添加UIDynamicBehaviors,如下所示:

1)UIDynamicItemBehavior停止标签旋转 2)UISnapBehavior将标签捕捉到视图的中心(我想要类似重力的运动,但同样,这不是这个问题) 3)UICollisionBehavior对于collisionModeis的所有标签.Items

这适用于“初始”设置......所有标签出现在随机点,然后在中心快速对齐,并进行适当的碰撞检测。不过,我的问题是,我怎样才能移动标签(通过平移手势)以继续进行碰撞检测?

UIPanGestureRecognizer在每个标签上都设置了一个,当它们开始拖动时,我创建一个UIAttachmentBehavior并在拖动时使用它来移动它们。这在标签移动的意义上“有效”,但它只会滑过所有其他标签而不会发生任何碰撞检测。我怎样才能实现这种碰撞检测,以便当我开始将一个标签拖向其他标签时,它们会移开刚好足以没有重叠(然后这些标签会根据中心重心点迅速回到它们的位置) ? 我是否需要将UIAttachmentBehavior所有其他标签附加到我为每个平底锅拖动的标签上?

我为我面临的问题创建了一个测试项目,它展示了我刚才描述的内容:

github测试项目

谢谢!

4

1 回答 1

0

嗯,经过几个月的思考这个问题,我终于想到了一个解决方案,所以我想我会在以后将它发布在这里以供大家受益。

使用简单的 SpriteKit 场景非常容易实现。我只是创建了一个小的 s,使用我想要的任何文本/颜色/大小SKSceneSKLabelNodes 添加到该场景中,然后添加一个SKFieldNodewith radialGravityField。从那里,物理属性可以通过每个节点的属性进行播放physicsBody,我可以通过插入场景的方法并适当地移动适当的节点来完成所需的操作touchesBegan,物理引擎会为我处理碰撞和弹跳。

于 2016-12-18T03:24:01.673 回答