2009-06-22 9 views
3

Gibt es eine Möglichkeit, eine benutzerdefinierte Animation zu erstellen, wenn Sie auf eine iPhone-Schaltfläche klicken? Ich möchte etwas wie die App Store-Taste - es zeigt den Preis, und wenn Sie darauf klicken, ändert sich die Farbe und der Text ändert sich zu kaufen, und wenn Sie erneut klicken, wird der Kauf abgeschlossen.iPhone - Wie man einen Knopf beim Drücken animiert?

Der UIViewAnimationTransition enthält nur einige wenige Werte, die nicht die volle Funktionalität bieten. Ist es möglich, so etwas wie dieses, aber mit der Animation zu tun:

- (IBAction) changeButtonDisplay:(id)sender { 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.8]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:purchaseButton cache:NO]; //the built in UIViewAnimationTransition values don't provide enough flexibility 

    [purchaseButton setTitle:@"Buy Now" forState:UIControlStateNormal]; 
    [purchaseButton setBackgroundColor:[UIColor greenColor]]; 
    [purchaseButton addTarget:self action:@selector(purchaseItems:) forControlEvents:UIControlEventTouchUpInside]; 

    [UIView commitAnimations]; 

} 

Dieser Code funktioniert und die richtigen Übergang anzuzeigen und ermöglichen den zweiten Klick die richtige Aktion zu tun, aber die Titel und die Farbe ändert sich sofort, nicht in einer glatten Animation. Ist es möglich, eine solche Animation einfach durchzuführen, muss ich eine UIButton-Unterklasse erstellen und die Animation "manuell" ausführen? Wenn ja, welche Methode müsste ich außer Kraft setzen?

Antwort

4

Anstatt nur den Titel und das Ziel usw. der Schaltfläche zu ändern, haben Sie zwei separate Schaltflächen, die jede Aktion ausführen und anders aussehen. Wenn Sie dann die Taste drücken, rufen Sie eine Methode auf, die die aktuelle Schaltfläche aus der Superansicht entfernt und an ihrer Stelle die neue Schaltfläche der Ansicht hinzufügt. Wickeln Sie das in einem UIView-Animationsblock auf und Sie sollten Ihre Animation erhalten.

Damit dies funktioniert, müssen Sie den Animationsübergang auf die Superansicht der Schaltfläche einstellen. Es kann also nützlich sein, eine "Containeransicht" zu verwenden und dann Schaltflächen als Unteransichten hinzuzufügen.

Pseudo-Code könnte so etwas wie so aussehen:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.8]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:buttonConteinerView cache:NO]; //the built in UIViewAnimationTransition values don't provide enough flexibility 

[purchaseButton retain]; 
[purchaseButton removeFromSuperView]; 

[buttonContainerView addSubview:secondPurchaseButton]; 

[UIView commitAnimations]; 
+1

Auch die Standardanimation Übergang ist eine fade, so dass Sie nicht eine Animation Übergang zu setzen brauchen könnte. – Jasarien

3

A Standard UIView wird tun, was Sie wollen. UIViews backgroundColor ist eine animierbare Eigenschaft.

Ich würde eigenen "Button" durch Unterklassen UIView ODER alternativ Unterklasse eine UIButton und Hinzufügen von Unteransichten zu machen. (Anmerkung: UIButtons waren ein Schmerz darüber in 2.2, nicht sicher, in 3.0)

Sie benötigen einen UILabel für jeden Text Zustand:

UILabel *textForStateOne; 
UILabel *textForStateTwo; 

Und Sie können die Hintergrundfarbe der übergeordneten Ansicht ändern.

Also dann machen Sie eine Methode in der neuen Schaltfläche Klasse:

-(void)toggleState{ 

myState = !myState; 

    if(myState){ 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.8]; 

     [textForStateOne setAlpha:1.0] 
     [textForStateTwo setAlpha:0.0] 

     [self setBackgroundColor:[UIColor greenColor]]; 

     [UIView commitAnimations]; 


    } else{ 

     //do the opposite here 

    } 




} 
0
UIView *btnView4=button; 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:btnView4 cache:YES]; 
[UIView commitAnimations];`` 
+0

bitte lernen, wie man den Code formatiert (es gibt ein Fragezeichen oben im Eingabefeld :-) – kleopatra

Verwandte Themen