我有一個UIScrollView
,它包含許多可拖動的UIViews
,它們具有不同的大小,主要是方形的。這些UIViews
捕捉到屏幕上的6列網格。通過移動另一個UIView來影響所有UIViews
當UIView
(假設其尺寸爲132x132)卡入位置與另一UIView's
幀與所述第一UIView
幀相交,第二應該移動低於第一,無論是通過全或第一高度的一半UIView
(取決於UIViews
相交的位置)。我通過使用CGRectIntersectsRect
以及CGRectGetMaXY
和CGRectGetMinY
來計算所需的移動距離。
但是,在已經受到影響的UIView下面還可能有第三個甚至更多的UIViews
,這些UIView也可能需要移動。在這裏,我的問題是,我不能夠
一)獲得所有受影響UIViews
以正確的順序移動的UIView
(不搶購UIView
)(由他們的Y原點訂購)
B)移動UIViews
下面,基於UIView
僅限於它們,不受UIView
的影響(即使移動距離可能相同)。
我的當前的嘗試是得到一個UIView
該貼緊,加入UIView
和所需的移動距離爲字典到一個數組,然後使用遞歸加入其它UIViews
下方之後與移動UIView
相交。但有時候,UIViews
由於它們在視圖層次結構中的順序而被錯誤移動,或者甚至根本不移動它們。
下面是一個例子:與框架
- 的UIView A =
0 0; 269 132
- 的UIView乙與幀=
0 205.5; 63.5 63.5
- 的UIView下用幀=
137 137; 132 132
卡入0 0; 132 132
- 邊界間距爲5像素
當UIView
C卡入到位,UIView A應該移動到0 137; 269 132
,因爲所需的移動距離是UIView C +邊框間距的整個高度。但移動UIView
A到其新位置也影響UIView
B,然後移動到0 274; 63.5 63.5
,高度的一半UIView
A +邊框間距,刪除UIView
A和B之間的空間。
下面是另一個例子:與框架
- 的UIView A =
0 0; 269 132
- 的UIView乙與幀=
0 205.5; 63.5 63.5
- 的UIView下用幀=
0 274; 269 269
卡入0 68.5; 269 269
當UIView
C移動到位,UIView A移動到0 274; 269 132
,然後影響UIView
B並將其移動到0 411; 63.5 63.5
,刪除之前在UIView
A和B之間的空間。
在你的第一個例子中,你的意思是說你的UIView A的幀大小從269,132變爲132,132?那是對的嗎?我假設那些是框架的寬度/高度。 –
在第二個例子中,UIView C移動到位後,UIView A移動,那麼C和A重疊? –
UIView大小不變。這是一個錯誤,我修復了它。在第二個示例中,當UIView C移動到位時,它與A和B重疊,因此需要向下移動。 –