2012-04-09 12 views
0

Ich habe 5X5 Raster von Schaltflächen. Wenn ich den Knopf an Position1 drücke und dann den Knopf an Position2 drücke, möchte ich, dass das Knopfbild von Position1 zu dem Knopf an Position2 bewegt wird. Wie im folgenden Beispiel gezeigt, wird zuerst die A1-Taste und dann die B2-Taste gedrückt.
Beispiel:

A1 button pressedVerschieben der Schaltfläche Bild von der ersten Taste gedrückt, um die zweite Taste gedrückt

Abb: A1-Taste gedrückt

B2 button pressed

Abb: B2 Taste gedrückt

So ist der Gesamtprozess besteht aus zwei Schritten:

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 

Ich habe Button-Tags für diese 25 Tasten im 5X5-Raster eingestellt. Jetzt habe ich Schwierigkeiten, die Logik herauszufinden, um die gewünschte Aktion zu haben.

Was würde die Logik in dem diesem Verfahren sein:

-(void)a1ButtonPressed:(id)sender 
{ 

} 

-(void)b2ButtonPressed:(id)sender 
{ 

} 

Während die Tasten diese Tags haben:

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

Kann jemand helfen? Vielen Dank im Voraus .... :)

Antwort

1

nur eine Methode für alle Tasten, einfache Logik so etwas wie dieses

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

In der Kopfzeile Sie

BOOL buttonPressed; 
UIImage *buttonImage; 
UIButton *initialBtn; 

Dies würde auch hätte funktionieren, wenn der Benutzer dieselbe Taste zweimal drückt und die Auswahl abbricht.

Hoffe das hilft dir!

1

Es gibt viele Möglichkeiten, um Ihr Ziel zu erreichen ...

Sie diese Methode verwenden, können Sie Ihre Schaltfläche Bild ändern:

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

Und Sie können Ihre Schaltfläche Bild mit einer Variablen verwalten.

Dann:

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

Und so weiter ...

fistButton ist ein BOOL, die steuern, ob die gedrückte Taste erste oder zweite ist. imageToMove ist ein UIImage, das an anderer Stelle deklariert wurde und das zu verschiebende Bild verwaltet.

Wie auch immer, können Sie nur eine Methode für alle von Ihnen 25 Tasten verwenden:

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

Wenn Sie Animation UIView Animation tun müssen, geben wollen, dass die Kern Animation bitte

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

ist wie Es

+0

Das ist gut, aber die Verwendung dieser Methoden wird von iOS 4 und höher abgeraten. Verwenden Sie stattdessen die blockbasierten Animationsmethoden. – Beppe

0

Eine Alternative, um dies zu erreichen, fügen Sie alle Schaltflächen in einem Array bei der Erstellung der Schaltflächen und legen Sie für jede Schaltfläche ein Tag. Speichern Sie dann das Tag der beiden gedrückten Taste.Verwenden das vorherige gedrückte Tag, um die Schaltfläche mithilfe von [buttonarray objectAtIndex: previous.tag] zu lesen und auf Null und zum aktuellen Tag festzulegen Hintergrundbild der vorherigen Schaltfläche.

Verwandte Themen