带有附件的 UIKit 动态行为平移不继续碰撞行为?
Posted
技术标签:
【中文标题】带有附件的 UIKit 动态行为平移不继续碰撞行为?【英文标题】:UIKit dynamic behavior pan with attachment not continuing collision behavior? 【发布时间】:2016-09-29 12:41:54 【问题描述】:如何在UIDynamicItem
的盘上进行碰撞检测?
背景:我从一组颜色/字符串中随机生成 20 个标签(这部分不是问题的关键部分),然后将它们添加到具有随机中心位置的主视图中.从那里,我添加UIDynamicBehavior
s,如下:
1) UIDynamicItemBehavior
停止标签旋转
2)UISnapBehavior
将标签捕捉到视图的中心(我想要类似重力的运动,但同样,这不是这个问题)
3) UICollisionBehavior
对于collisionMode
为.Items
的所有标签。
这适用于“初始”设置...所有标签出现在随机点,然后在中心快速对齐,并进行适当的碰撞检测。不过,我的问题是,我怎样才能移动标签(通过平移手势)以继续进行碰撞检测?
我在每个标签上设置了一个UIPanGestureRecognizer
,当它们开始拖动时,我创建一个UIAttachmentBehavior
,并在拖动时使用它来移动它们。这在标签移动的意义上“有效”,但它只会滑过所有其他标签而不会发生任何碰撞检测。我怎样才能实现这种碰撞检测,以便当我开始将一个标签拖向其他标签时,它们会移开刚好足以没有重叠(然后这些标签会根据中心重心点迅速回到它们的位置) ?我是否需要将UIAttachmentBehavior
附加到我为每个平底锅拖动的所有其他标签上?
我已经为我面临的问题创建了一个测试项目,它展示了我刚才描述的内容:
github test project
谢谢!
【问题讨论】:
【参考方案1】:嗯,经过几个月的思考,我终于想到了一个解决方案,所以我想我以后会在这里发布它以供大家受益。
这通过一个简单的 SpriteKit 场景非常容易实现。我只是创建一个小的SKScene
,将SKLabelNode
s 添加到该场景中,使用我想要的任何文本/颜色/大小,然后添加一个SKFieldNode
和radialGravityField
。从那里,物理属性可以通过每个节点的physicsBody
属性进行播放,我可以通过插入场景的touchesBegan
方法并适当地移动适当的节点来完成所需的操作,并由物理引擎负责碰撞和弹跳对我来说。
【讨论】:
以上是关于带有附件的 UIKit 动态行为平移不继续碰撞行为?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 力学动画生成器UIKit Dynamics 之碰撞效果解说