1

我正在使用 Xcode 开发一个项目,我使用一堆包含 UIImage 的小 UIImageViews 设置了一个棋盘,并将它们放置在一个更大的 UIImageView 中,代表棋盘。

到目前为止,我设法正确使用 UITouches 在棋盘上自由拖放 UIImageViews(碎片)。但是,当我放下它们时,它们就会降落在我释放它们的任何地方,这自然是应该的,但这不是我想要的效果。

理想情况下,UIImageViews 不应该移动到任何地方,我只想将 UIImage 从当前选择的 UIImageView 转移到下一个 UIImageView。我相信不以这种方式进行拖放会简单得多,而是我使用点击(或点击)。我点击一个 UIImageView,然后点击下一个 UIImageView 将从前一个 UIImageView 中获取 UIImage。想一想如何在不拖放图像的情况下下棋。

那么有人对如何在这里进行有任何建议吗?提前致谢!

编辑:这里有一些代码来显示我现在在做什么:

//================================================================================
// I have two arrays containing UIImageViews each, one representing board cells,
// the other one the pieces. The below functions handle the touch and drag actions.
// What I need to do is change this somehow so that the UIImageViews representing
// the pieces do one of the following things:
// 1. When the pieces are dragged, you can drop them and they center themselves
//    on top of the UIImage views that represent the cells of the board.
// 2. I have an array of UIImageViews containing the cells, when I click on a
//    UIImageView that has the image of a piece, it is copied and pasted onto
//    the next UIImageView that I click, of course controls will be set to determine
//    a valid move I can handle doing this part.
//================================================================================

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    //get location of the current touch event
    UITouch *touch = [[event allTouches] anyObject];
    //get touch location for the touched image (self used instead of touch)
    CGPoint touchLocation = [touch locationInView:[self view]];   
    //select and give current location to the selected view
    for (UIImageView *piece in chessCells) {
        if([touch view] == piece){
            piece.center = touchLocation;
    }
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    //allow the selected event (in our case a UIImageView) to be dragged
    [self touchesBegan:touches withEvent:event];
}

最初我把这个问题留了下来,因为我知道我必须以某种方式改变我的实现,但我希望这段代码有助于理解我所面临的问题:Drag and Drop anywhere without任何限制,我只是不知道如何控制这从发生。

4

2 回答 2

1

当点击发生在 UIImageView 上时如何制作它的副本,并使用该副本进行拖动。发布完成后,使用复制的 UIImageView 中的 UIImage 来更改正在放置的 UIImageView,然后删除复制的 UIImageView?

于 2012-05-29T14:39:23.570 回答
1

UIImage 只是数据——它不会在任何地方绘制自己。您需要一个 UIImageView(或其他一些视图或图层类)来在屏幕上绘制图像。因此,如果您只是将图像从一个图像视图移动到另一个图像视图,则图像将在一个位置消失并出现在另一个位置——当该块从一个正方形移动到另一个正方形时,不会有任何动画。

我建议使用 Core Animation 自己移动图像视图。这将提供一些反馈,以便用户更好地了解哪块移动到了哪里。这在象棋这样的游戏中尤其重要,其中的一部分挑战是注意哪些棋子能够移动到哪里。

将棋子正确放置在广场上的关键是将它们移动到所需的位置。例如,您可以通过将center相应图像视图的 更改从一个正方形的中心到另一个正方形的中心来移动一块。

于 2012-05-29T14:46:15.990 回答