UIKit动态行为平移与附件没有持续的碰撞行为?

时间:2016-09-29 12:41:55

标签: ios swift uikit-dynamics uidynamicbehavior

如何在UIDynamicItem

的平底锅上进行碰撞检测

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

1)UIDynamicItemBehavior阻止标签旋转 2)UISnapBehavior将标签捕捉到视图的中心(我想要一个像引力一样的动作,但同样,这不是这个问题) 3)UICollisionBehavior适用于collisionMode.Items的所有标签。

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

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

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

github test project

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,经过几个月思考这个问题,我终于想到了一个解决方案,所以我想我会在这里发布它,以便以后每个人都能获益。

使用简单的SpriteKit场景,这非常容易实现。我只需创建一个小SKScene,将SKLabelNode添加到该场景中,使用我想要的任何文本/颜色/大小,然后添加SKFieldNode radialGravityField。从那里开始,物理属性可以通过每个节点的physicsBody属性进行播放,我可以通过插入场景的touchesBegan方法并适当地移动相应的节点来完成所需的内容。发动机照顾碰撞并为我弹跳。