【问题标题】:moving button image from first button pressed to second button pressed将按钮图像从按下的第一个按钮移动到按下的第二个按钮
【发布时间】:2012-04-09 09:05:30
【问题描述】:

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

图:按下 A1 按钮

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

有人可以帮忙吗?在此先感谢.... :)

【问题讨论】:

    标签: iphone cocoa-touch ios4 logic


    【解决方案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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果要给动画需要做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];
      

      请喜欢

      【讨论】:

      • 这很好,但在 iOS 4 及更高版本中不鼓励使用这些方法。请改用基于块的动画方法。
      【解决方案3】:

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

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

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

      希望对您有所帮助!

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-22
          • 2016-02-16
          • 2018-04-04
          • 2020-01-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多