通過在超級視圖上覆蓋觸摸事件,您可以非常輕鬆地創建此係統。觸摸開始找出什麼子視圖被擊中,接觸移動它的中心觸摸位置和觸摸結束再次檢查它被放在哪個視圖和交換這兩個視圖。
對UIView
有很多方便的方法可以幫到你:pointInside
,convertPoint
,convertRect
。您可能只需要pointInside
用於您的目的。
所以在這種情況下,你應該設置userInteractionEnabled
到NO
瓷磚和處理觸摸他們的超級視角。要進行命中檢查,只需使用for
循環和pointInside
,但在觸摸結束時,您應該跳過對當前正在拖動的視圖的檢查。
編輯: UIPanGestureRecognizer評論
UIPanGestureRecognizer
可能實際工作,雖然你受益很少的吧。你將能夠獲得它即時平移的觀點,但這是關於它的。您仍然需要通過類似for
循環的方式找到它已完成的視圖。手勢的位置將需要轉換爲超視圖座標(如果沒有,您將始終收到相同的座標,因爲您移動視圖本身)。缺點是你不會立即得到平移的事件,你將不得不開始拖動視圖幾個像素來接收平移開始,另一方面,你可能想立即將視圖放在前面或做一些事情其他動畫來通知用戶該視圖是可移動的。
無論如何,UIPanGestureRecognizer是爲了平移而設計的。雖然它可能會用於您的目的,但您可能會發現自己在做更多的工作,那麼只需簡單的觸摸事件即可。
馬蒂奇的解釋是好了很多,這是非常好的信息 – aug2uag
由於馬蒂奇和aug2uag您建議,但是您認爲UIGestureRecognizerPan可能會更有益,因爲它將以不同方式用於每個視圖?謝謝。 – kforkarim
我編輯了你的評論的答案... –