0

すべての画面を占める9つのUIView(ビューを含む3x3のテーブル、各行に3つのビューを想像してください)を含む画面があります。UIView をドラッグしてから移動すると、touchEnded が他のインターセプト UIViews の間のどこかに配置され、UIViews を含む 3x3 画面が再び必要になります。 .

UIView の並べ替えを除いて、すべてが順調に進んでいます。他の UIView が最も交差していると推測するもの (ドラッグ可能な UIView フレームが持つすべての UIView の間で最大の領域が交差している) を見つけ、すべての UIView を新しい位置で並べ替える方法が必要です。

これらはすべて、すべてのビューを所有し、UIView を持つ NSMutableArray を持つスーパービューで発生しています。リスト内のオブジェクトを移動したくありませんが、フレームを介して解決策を見つけます。

テーブルに 9 枚のカードがあり、この 3x3 グリッドでそれらの位置を変更するとします。

ありがとうございました。

4

1 に答える 1

0

view.center を使用して、ポイントが他のビューと交差するかどうかを判断します。それらが重なっていない場合、中心は 1 つのビューにのみヒットします。次のコードを使用して、交差するビュー内のポイントを取得できます。

CGPoint centerInOtherView = [thisView convertPoint:thisView.center toView:otherView];

次に、次のコードで交差をテストできます。

if ([otherView pointInside:centerInOtherView withEvent:nil]){
    // Do Something
}

その時点で、ドラッグするビューの中心がテストしているビュー内にあることがわかります

ビューを再配置することもできます。

UIView *mySuperView = [thisView superview];
NSUInteger index = [[[mySuperView subviews] indexOfObject:otherView];
[thisView removeFromSuperview];
[mySuperView insertSubview:newView atIndex:index];
于 2012-07-13T20:50:40.950 に答える