0

我有 5X5 网格的按钮。如果我按下位置​​ 1 的按钮,然后按下位置 2 的按钮,我希望位置 1 的按钮图像移动到位置 2 的按钮。如下例所示,先按下 A1 按钮,然后按下 B2 按钮。
例子:

按下 A1 按钮

图:按下 A1 按钮

按下 B2 按钮

图:按下 B2 按钮

所以,整个过程有两个步骤:

1. Prepare to move image when first button pressed
2. Move the image from first button to second button when the second button is pressed

我为 5X5 网格中显示的 25 个按钮设置了按钮标签。现在我很难找出执行所需操作的逻辑。

这些方法的逻辑是什么:

-(void)a1ButtonPressed:(id)sender
{

}

-(void)b2ButtonPressed:(id)sender
{

}

虽然按钮有这些标签:

A1.tag = 1;
B2.tag = 7;

任何人都可以帮忙吗?提前致谢.... :)

4

4 回答 4

1

只需对所有按钮使用一种方法,简单的逻辑就是这样

-(void)buttonPressed:(UIButton *)btn {
     if (buttonPressed) {//second press
         [initialBtn setImage:blankImage forControlState:UIControlStateNormal];
         [btn setImage:buttonImage forControlState:UIControlStateNormal];
         buttonPressed=NO;
     } else {//first press
         buttonImage=[btn imageForState:UIControlStateNormal];
         buttonPressed=YES;
         initialBtn=btn;
     }

在您的标题中,您将拥有

 BOOL buttonPressed;
 UIImage *buttonImage;
 UIButton *initialBtn;

如果用户按下相同的按钮两次,取消他们的选择,这也将起作用。

希望这对你有帮助!

于 2012-04-09T09:37:47.127 回答
1

有很多方法可以实现你的目标...

您可以使用此方法更改按钮图像:

[aButton setImage:[UIImage imageNamed:@"anImage"] forState:UIControlStateNormal];

您可以使用变量管理按钮图像。

然后:

-(void)a1ButtonPressed:(id)sender
{
    if (firstButton) {
        // Get image to move from A1
        imageToMove = [A1 imageForState:UIControlStateNormal];
        // Remove image from A1
        [A1 setImage:nil forState:UIControlStateNormal];
        firstButton = NO;
    } else {
        // Put new image to A1
        [A1 setImage:imageToMove forState:UIControlStateNormal];
        firstButton = YES;
    }

}

-(void)b2ButtonPressed:(id)sender
{
    if (firstButton) {
        // Get image to move from B2
        imageToMove = [A1 imageForState:UIControlStateNormal];
        // Remove image from B2
        [B2 setImage:nil forState:UIControlStateNormal];
        firstButton = NO;
    } else {
        // Put new image to B2
        [B2 setImage:imageToMove forState:UIControlStateNormal];
        firstButton = YES;
    }
}

等等...

fistButton是一个 BOOL,它控制按下的按钮是第一个还是第二个。 imageToMove是在其他地方声明的 UIImage,用于管理要移动的图像。

无论如何,您可以对所有 25 个按钮只使用一种方法:

-(void)buttonPressed:(UIButton *)button
{
    if (firstButton) {
        // Get image to move from button
        imageToMove = [button imageForState:UIControlStateNormal];
        // Remove image from button
        [button setImage:nil forState:UIControlStateNormal];
        firstButton = NO;
    } else {
        // Put new image to button
        [button setImage:imageToMove forState:UIControlStateNormal];
        firstButton = YES;
    }
}
于 2012-04-09T09:52:23.823 回答
1

如果要给动画需要做 UIView 动画,也就是核心动画

[UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.2];
        //set animation value means the next postion where u want to move object 
        [UIView commitAnimations];

请喜欢

于 2012-04-09T10:00:39.097 回答
0

完成此操作的另一种方法是,在创建按钮时将所有按钮添加到数组中,并为每个按钮设置一个标签。然后存储两个按下按钮的标签。使用上一个按下的标签来读取按钮,使用 [buttonarray objectAtIndex:previous.tag ] 并设置为 nil 并设置为上一个按钮的当前标记集背景图像。

于 2012-04-09T10:29:05.037 回答