BHe*_*cks 10 ios uidynamicbehavior uikit-dynamics swift
如何在平底锅上发生碰撞检测UIDynamicItem
?
背景:我从一组颜色/字符串中随机生成20个标签(这部分对于问题不是必不可少的),然后将它们添加到具有随机中心位置的主视图中.从那里,我添加UIDynamicBehavior
s,如下:
1)UIDynamicItemBehavior
停止旋转2)标签UISnapBehavior
的标签捕捉到视图的中心(我想重力状运动,但同样,这不是这个问题)3)UICollisionBehavior
所有的标签,其中collisionMode
的.Items
.
这适用于"初始"设置...所有标签都出现在随机点上,然后在中心快速捕捉,并进行适当的碰撞检测.但问题是,我怎样才能移动标签(通过平移手势),以便继续进行碰撞检测?
我已经UIPanGestureRecognizer
在每个标签上设置了一个,当它们开始拖动时,我创建一个UIAttachmentBehavior
并使用它来拖动它们.这在标签移动的意义上"起作用",但它只会滑过所有其他标签而不会发生任何碰撞检测.我怎样才能实现这种碰撞检测,这样当我开始将一个标签拖向其他标签时,它们就会移开,只是为了没有重叠(然后根据中心重力点重新回到它们的位置) ?我是否需要将UIAttachmentBehavior
所有其他标签附加到我为每个平底锅拖动的标签上?
我已经为我面临的问题创建了一个测试项目,它展示了我刚刚描述的内容:
谢谢!
好吧,经过几个月的思考这个问题,我终于想到了一个解决方案,所以我想我会把它发布在这里,以供大家参考。
使用一个简单的 SpriteKit 场景就可以非常轻松地实现这一点。我只是创建一个小的SKScene
,将SKLabelNode
s 添加到该场景中,并添加我想要的任何文本/颜色/大小,然后添加一个SKFieldNode
with radialGravityField
。从那里开始,可以通过physicsBody
每个节点的属性来使用物理属性,并且我可以通过插入touchesBegan
场景的方法并适当地移动适当的节点来准确地完成所需的操作,同时物理引擎会为我处理碰撞和弹跳。