iOS 绘制网格视图以拖放捕捉到该网格的对象

Hen*_*ale 5 iphone objective-c ipad ios

我正在开发一个需要将自定义视图分割成正方形的项目。您需要能够将另一个视图拖到它上面,当您放下该对象时,它会捕捉到网格方块。我还需要能够遍历网格中的每个方块并确定一个对象是否在该特定网格方块内。

我意识到这是一个普遍的问题,但我只是在寻找有关从哪里开始、可能已经存在的类或框架以供参考的任何方向。任何方向都将不胜感激。谢谢。

dan*_*550 2

问题#1:用户需要能够将另一个视图拖动到其上,并且当您放置该对象时,它将捕捉到网格方块。

假设您正在拖动 UIView。在 UIView 的 TouchsEnded 上,我将使用包含 UIView 的 x 和 y 坐标中心值的 center 属性,并将其传递给一个函数,该函数测试它位于哪个网格方块内。

这看起来像这样(假设 UIView 的名称为draggingView):

for (CGRect gridSquare in gridArray) {
    if (CGRectContainsPoint(gridRect, draggingView.center)) {
        // Return the gridSquare that contains the object
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您想知道 gridArray 是什么,它是构成游戏板的所有网格方块的数组。如果您需要帮助创建此内容,请告诉我。

问题#2:用户需要能够遍历网格中的每个方块并确定对象是否位于该特定网格方块内。

如果您能够按照上面的步骤操作,那么这很容易。在迭代网格方块时,您可以使用 gridSquare 原点值来查看是否有任何 DraggingView 子视图具有相同的原点。使用这个你可以返回特定正方形内的 UIView。见下文:

- (UIView *)findViewInSquare {
    for (CGRect rect in gridArray) {
        for (UIView *view in [self.view subViews]) {
            if (CGPointEqualToPoint(view.frame.origin, rect.origin)) {
                return view;   // Returns the view in the grid square
            }
        }
    }
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

希望这一切都有道理,如果您需要任何说明,请告诉我。