UIScrollView
には、多くの場合、正方形のサイズが異なる多くのドラッグ可能なUIViews
が含まれています。これらのUIViews
は、画面上の6列グリッドにスナップします。上の別のUIViewを動かすことで影響を受けるすべてのUIViewを取得
完全または最初の半分の高さのいずれかによって、UIView
(のは、その大きさが132x132であるとしましょう)が所定の位置に固定し、別のUIView's
フレームは、第が最初に下に移動するようになっている、第一UIView
フレームと交差する場合UIView
(UIViews
のどこが交差しているかによって異なります)。私は、CGRectIntersectsRect
と、CGRectGetMaXY
とCGRectGetMinY
を使って、必要な移動距離を計算することで、この作業を行っています。
しかし、移動しなければならない可能性のある既に影響を受けたUIViewの下には、さらに3番目またはそれ以上の可能性があります。UIViews
ここでの私の問題は、に基づいてUIViews
を移動する彼らのY原点で注文正しい順序()
b)の中(UIView
スナップません)私は
にはできませんよということa)すべての移動UIView
以下UIViews
に影響を与えますですUIView
は、UIView
の影響を受けずに(移動距離は同じかもしれませんが)、所定の位置にスナップします。
私の現在の試みは、スナップアレイに辞書としてUIView
、必要な移動距離を添加し、次に再帰を使用して、その下に他のUIViews
を添加した後、移動UIView
と交差1 UIView
を得ることです。ただし、UIViews
がビュー階層内での順序のために正しく移動されない場合や、まったく移動されない場合もあります。フレームと
- のUIView A =フレームと
0 0; 269 132
- のUIView B =ボーダー間隔が5である
0 0; 132 132
に収まるフレームと0 205.5; 63.5 63.5
- のUIView C =
137 137; 132 132
:ここ は一例で画素
UIView
Cが適切な位置にスナップすると、UIView Aは0 137; 269 132
に移動することになっています。これは、必要な移動距離がUIView C +のボーダー間隔の最大高さであるためです。しかし、UIView
Aをその新しい位置に移動すると、UIView
Bにも影響があり、それはUIView
Aの半分の高さと境界の間隔になり、UIView
AとBの間のスペースが削除されます。ここ
は別の例である:0 68.5; 269 269
に収まるフレームとフレーム= 0 205.5; 63.5 63.5
0 274; 269 269
のフレーム=0 0; 269 132
- のUIView A
UIView
Cが移動し、UIView Aが0 274; 269 132
に移動し、次にに影響しますBを入力し、0 411; 63.5 63.5
に移動して、前にUIView
AとBの間のスペースを削除します。
最初の例では、UIView Aのフレームサイズが269,132から132,132に変更されていますか?あれは正しいですか?私はそれらがフレームの幅/高さであると仮定しています。 –
2番目の例では、UIView Cが動いてUIView Aが動いた後、CとAが重なっていますか? –
UIViewのサイズは変更されていません。それは間違いで、私はそれを修正しました。 2番目の例では、UIView Cが所定位置に移動すると、AとBの両方と重なっているため、下に移動する必要があります。 –