带有附件的 UIKit 动态行为平移不继续碰撞行为?
UIKit dynamic behavior pan with attachment not continuing collision behavior?
如何在 UIDynamicItem
的盘上进行碰撞检测?
背景:我从一组colors/strings中随机生成20个标签(这部分对问题来说不是必需的),然后将它们添加到具有随机中心位置的主视图。从那里,我添加 UIDynamicBehavior
s,如下所示:
1) UIDynamicItemBehavior
停止标签旋转
2) UISnapBehavior
将标签捕捉到视图的中心(我想要类似重力的运动,但同样,这不是这个问题)
3) UICollisionBehavior
对于 collisionMode
为 .Items
的所有标签。
这适用于 "initial" 设置...所有标签都随机出现,然后在中心快速对齐,并进行适当的碰撞检测。不过,我的问题是,我如何才能移动标签(通过平移手势)以便继续进行碰撞检测?
我在每个标签上设置了一个 UIPanGestureRecognizer
,当它们开始拖动时,我创建了一个 UIAttachmentBehavior
并在我拖动时使用它来移动它们。这个 "works" 在标签移动的意义上,但它只会滑过所有其他标签而不会发生任何碰撞检测。我怎样才能实现这种碰撞检测,这样当我开始将一个标签拖向其他标签时,它们就会移开足以不重叠的地方(然后这些标签会根据中心重力点快速回到它们的位置) ?我是否需要将 UIAttachmentBehavior
附加到我为每个平底锅拖动的标签的所有其他标签?
我已经为我面临的问题创建了一个测试项目,它展示了我刚才描述的内容:
谢谢!
好吧,经过几个月的思考这个问题,我终于想到了一个解决方案,所以我想我以后 post 在这里为了大家的利益。
用一个简单的 SpriteKit 场景就可以轻松完成。我只是创建了一个小的 SKScene
,将 SKLabelNode
添加到那个场景中,添加任何我想要的 text/color/sizing,然后添加一个 SKFieldNode
和 radialGravityField
。从那里,物理属性可以通过每个节点的 physicsBody
属性 来播放,我可以通过插入场景的 touchesBegan
方法并适当地移动适当的节点来准确地完成我想要的,物理引擎会为我处理碰撞和弹跳。
如何在 UIDynamicItem
的盘上进行碰撞检测?
背景:我从一组colors/strings中随机生成20个标签(这部分对问题来说不是必需的),然后将它们添加到具有随机中心位置的主视图。从那里,我添加 UIDynamicBehavior
s,如下所示:
1) UIDynamicItemBehavior
停止标签旋转
2) UISnapBehavior
将标签捕捉到视图的中心(我想要类似重力的运动,但同样,这不是这个问题)
3) UICollisionBehavior
对于 collisionMode
为 .Items
的所有标签。
这适用于 "initial" 设置...所有标签都随机出现,然后在中心快速对齐,并进行适当的碰撞检测。不过,我的问题是,我如何才能移动标签(通过平移手势)以便继续进行碰撞检测?
我在每个标签上设置了一个 UIPanGestureRecognizer
,当它们开始拖动时,我创建了一个 UIAttachmentBehavior
并在我拖动时使用它来移动它们。这个 "works" 在标签移动的意义上,但它只会滑过所有其他标签而不会发生任何碰撞检测。我怎样才能实现这种碰撞检测,这样当我开始将一个标签拖向其他标签时,它们就会移开足以不重叠的地方(然后这些标签会根据中心重力点快速回到它们的位置) ?我是否需要将 UIAttachmentBehavior
附加到我为每个平底锅拖动的标签的所有其他标签?
我已经为我面临的问题创建了一个测试项目,它展示了我刚才描述的内容:
谢谢!
好吧,经过几个月的思考这个问题,我终于想到了一个解决方案,所以我想我以后 post 在这里为了大家的利益。
用一个简单的 SpriteKit 场景就可以轻松完成。我只是创建了一个小的 SKScene
,将 SKLabelNode
添加到那个场景中,添加任何我想要的 text/color/sizing,然后添加一个 SKFieldNode
和 radialGravityField
。从那里,物理属性可以通过每个节点的 physicsBody
属性 来播放,我可以通过插入场景的 touchesBegan
方法并适当地移动适当的节点来准确地完成我想要的,物理引擎会为我处理碰撞和弹跳。