0

行と列の順序でUIView、スーパービュー内のサブビューを見つけ、そのうちの1つをドラッグして、他のすべての1つがより大きな領域と交差するようにします。

交差するUIViewの間にドラッグ可能なUIViewを挿入するためにこれが必要です。

frame.origin値を計算する必要がありますか?はいの場合、例を挙げていただけますか?または、これはiOS SDKを使用して発生する可能性がありますか?

私はすでにCGRectIntersectsRectを知っていますが、これにより、交差する最初のUIViewが得られます。ほとんどの場合、UIViewを他のUIViewの間に配置する必要があります。運が悪かったpointInsideを使用した例がありました。

コード:

CGPoint centerInView = [viewDragged convertPoint:viewDragged.center toView:view]; // Checking with the views inside NSMutableArray in a for in statement

if ([view pointInside:centerInView withEvent:nil]) // This if statement almost never is true sometimes only

その他のアプローチ:

if (CGRectIntersectsRect(viewDragged.frame, view.frame)) // This always happens for the first UIView in subviews that intersects. Not so applicable for information

基本的には、ドラッグ可能なビューを最も近いUIViewの間に挿入するという考え方です。

画面に同じサイズのビューが1、2、3、4、5あると想像してください。最初にドラッグして、4、5の間に移動してから、2、3、4、1、5にします。あなたはその考えを理解します。これはすべて、新しいグリッドの助けを借りずに行う必要があります。私が必要とする唯一の部分は、1つのUIViewを4,5の間に置くことを計算することです。

フレーム、原点の計算を開始できましたが、これは効率的に聞こえません。何かご意見は?

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

4

1 に答える 1

1

I now it's an old question, but this might help. The view with the biggest CGRect Intersection gets 'selected'.

CGRect intersect = CGRectZero;
UIView *selectedDropView = nil;
for (UIView *dropView in dropViews) {
    CGRect intersectTmp = (CGRectIntersection(self.frame, dropView.frame));
    if (intersectTmp.size.width * intersectTmp.size.height > intersect.size.width * intersect.size.height) {
        intersect = intersectTmp;
        selectedDropView = dropView;
    }
}
于 2013-05-02T19:35:40.950 に答える