2016-09-29 28 views
9

如何在UIDynamicItem的平底鍋上發生碰撞檢測?UIKit的動態行爲平移與附件不會繼續碰撞行爲?

背景:我從一組顏色/字符串中隨機生成20個標籤(這部分對於問題不是必需的),然後用隨機中心位置將它們添加到主視圖。從那裏,我加UIDynamicBehavior S,如下:

1)UIDynamicItemBehavior從旋轉 2)UISnapBehavior的標籤捕捉到視圖的中心停止標籤(我重力狀運動,但同樣希望,這不是這個問題) 3)UICollisionBehavior所有標籤collisionMode.Items

這在「初始」設置中起作用......所有標籤出現在隨機斑點處,然後迅速地在中心對齊,並進行適當的碰撞檢測。但是,我的問題是,如何才能移動標籤(通過平移手勢),以便繼續進行碰撞檢測?

我在每個標籤上設置了UIPanGestureRecognizer,當它們開始拖動時,我創建一個UIAttachmentBehavior並使用它在我拖動時移動它們。從標籤移動的意義上說,這個「起作用」,但它只會滑過所有其他標籤,而不會發生任何碰撞檢測。我該如何實現這種碰撞檢測,以便當我開始將一個標籤拖拽到其他標籤上時,它們移動到恰好不存在重疊的位置(然後根據中心重力點將它們回彈到它們的位置) ?我是否需要將UIAttachmentBehavior附加到我爲每個鍋拖動的標籤上?

我創造了我所面臨的問題,一個試驗項目,該項目展示了我剛纔所描述的:

github test project

謝謝!

回答

0

好吧,經過幾個月的思考這個問題,我終於想到了一個解決方案,所以我想我會在這裏發佈它爲大家的利益後。

這對於一個簡單的SpriteKit場景來說是非常容易完成的。我只是創建一個小的SKScene,將SKLabelNode加入到那個場景中,用我想要的任何文本/顏色/大小,然後用radialGravityField加上SKFieldNode。從那裏開始,物理屬性可以通過每個節點的physicsBody屬性來播放,我可以通過插入到場景的touchesBegan方法來完成所需的任務,並適當地移動合適的節點,物理引擎負責處理碰撞和彈跳我。