ios - 在通过手势将 View 移动到新位置后对网格中的 View 进行排序

标签 ios objective-c sorting nsmutablearray grid-layout

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

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

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

下面是我用来排序的代码,这里是a link to the actual project in a zip file

-(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];
    }];

}

enter image description here

最佳答案

您可以将所有 View 的原始位置存储在一个数组中(比如说positionArray),然后当您移动 View “A”时继续检查 View “A”的当前位置与positionArray中存储的位置,如果 View 在任何存储位置的范围内,只需交换 View 的位置“A” 具有 View “A” 已进入其范围的 View 。

希望对您有所帮助

关于ios - 在通过手势将 View 移动到新位置后对网格中的 View 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841792/

相关文章:

ios - NSUserDefault 正在重置

c++ - 如何对指向 int* 数组元素的 int** 数组进行排序

c# - 混合起来,然后再次重新排序 .Net 2.0 中的数组

php - 如何控制 MySQL 中的 UTF-8 排序?

ios - 如何使用 Swift 3 在默认 ios APP 中打开文档 URL?

iOS Facebook 如何获得推荐好友,例如 Hangtime 或 DrinkAdvisor

ios - 使 UINavigationBar 更短

ios - 带有自动布局的 Storyboard UITableViewCell

ios - 基于环境 fork jsCodeLocation的最佳实践

objective-c - 如何显示静态自定义单元格