带有附件的 UIKit 动态行为平移不继续碰撞行为?

UIKit dynamic behavior pan with attachment not continuing collision behavior?

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

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

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

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

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

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

github test project

谢谢!

好吧,经过几个月的思考这个问题,我终于想到了一个解决方案,所以我想我以后 post 在这里为了大家的利益。

用一个简单的 SpriteKit 场景就可以轻松完成。我只是创建了一个小的 SKScene,将 SKLabelNode 添加到那个场景中,添加任何我想要的 text/color/sizing,然后添加一个 SKFieldNoderadialGravityField。从那里,物理属性可以通过每个节点的 physicsBody 属性 来播放,我可以通过插入场景的 touchesBegan 方法并适当地移动适当的节点来准确地完成我想要的,物理引擎会为我处理碰撞和弹跳。