0

ボタンの5X5グリッドがあります。位置1のボタンを押してから位置2のボタンを押すと、位置1のボタン画像を位置2のボタンに移動したいと思います。以下の例のように、最初にA1ボタンを押してから、B2ボタンを押します。
例:

A1ボタンが押されました

図:A1ボタンが押された

B2ボタンが押された

図:押されたB2ボタン

したがって、プロセス全体には2つのステップがあります。

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

目標を達成する方法はたくさんあります...

このメソッドを使用して、ボタン イメージを変更できます。

[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押されたボタンが 1 番目か 2 番目かを制御する BOOL です。 imageToMove移動するイメージを管理する別の場所で宣言された UIImage です。

いずれにせよ、25 個のボタンすべてに対して 1 つの方法だけを使用できます。

-(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 に答える
1

すべてのボタンに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;

これは、ユーザーが同じボタンを 2 回押して選択をキャンセルした場合にも機能します。

これがお役に立てば幸いです!

于 2012-04-09T09:37:47.127 に答える
0

これを実現する別の方法として、ボタンの作成時にすべてのボタンを配列に追加し、各ボタンにタグを設定します。次に、両方の押されたボタンのタグを保存します。前に押されたタグを使用して、[buttonarray objectAtIndex:previous.tag] を使用してボタンを読み取ります。 ] に設定し、nil に設定し、現在のタグに前のボタンの背景画像を設定します。

于 2012-04-09T10:29:05.037 に答える