0

这有点令人费解,但我认为有一种非常简单有效的方法可以做到这一点。

在我的应用程序中,我在网格中布置了视图。可以通过手势将视图移动到任何位置。问题是在手势事件之后使视图排序到正确的位置。基本上我正在这样做。有点工作,但还不正确。

注意:视图的标签将始终更新到网格中视图的当前位置。

下面是我用来排序的代码,这里是zip 文件中实际项目的链接

-(void)sortViews:(UIView*)myView {

    __block int newIndex;

    // myView is the view that was moved.
    [viewsArray removeObject:myView];

    [viewsArray enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop){

        if (myView.center.x > view.center.x) {
            if (myView.center.y > view.center.y) {
                newIndex = view.tag -1;
                *stop = YES;
            } else {
                newIndex = view.tag +1;
                *stop = YES;
            }
        } else if (myView.center.x < view.center.x) {
            if (myView.center.y > view.center.y) {
                newIndex = view.tag -1;
                *stop = YES;
            } else {
                newIndex = view.tag +1;
                *stop = YES;
            }
        }

    }];

    if (newIndex < 0) {
        newIndex = 0;
    } else if (newIndex > 5) {
        newIndex = 5;
    }

    [viewsArray insertObject:myView atIndex:newIndex];

    [UIView animateWithDuration:.4 animations:^{
        [self arrangeGrid];
    }];

}

在此处输入图像描述

4

2 回答 2

1

您可以将所有视图的原始位置存储positionArray一个数组中(positionArray比如说视图在任何存储位置的范围内,只需将视图“A”的位置范围视图“A”所在的视图交换。

希望对你有帮助

于 2013-09-17T05:31:33.510 回答
0

找到了一个似乎工作得很好的更简单的解决方案。我将 viewsArray 枚举中的代码替换为:

   if (CGRectContainsPoint(view.frame, myView.center)) {

        newIndex = view.tag;

         *stop = YES;

    }
于 2013-09-18T03:42:20.433 回答