2012-04-09 101 views
0

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

A1 button pressed将按钮图像从第一个按钮按下移至按下的第二个按钮

图:A1按钮按下

B2 button pressed

图: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; 

谁能帮助?在此先感谢.... :)

回答

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; 

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

希望这可以帮助你!

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,用于管理要移动的图像。如果你想给动画

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

请像:

无论如何,你可以只使用一个方法,你所有的25个按钮它

+0

这是好事,但使用这些方法中的iOS 4和更高气馁。改为使用基于块的动画方法。 – Beppe 2012-04-09 11:29:03

0

一种替代实现这一点,在创建按钮时添加所有按钮中的阵列和设置的每个按钮tag.Then存储的两个按压button.Use标签先前压制标签使用[buttonarray objectAtIndex:previous.tag]读取按钮,并设定为零,并以前按钮的当前标签设置背景图像。