Pregunta

¿Hay alguna forma de hacer una animación personalizada al hacer clic en un botón de iPhone? Me gustaría algo como el botón de la App Store: muestra el precio y luego, cuando hace clic en él, cambia de color y el texto cambia para comprar ahora, luego, cuando hace clic nuevamente, completa la compra.

UIViewAnimationTransition solo contiene algunos valores que no proporcionan la funcionalidad completa. ¿Es posible hacer algo como esto pero con la animación:

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

}

Este código funciona y mostrará la transición adecuada y permitirá que el segundo clic haga la acción adecuada, pero el título y el color cambian instantáneamente, no en una animación uniforme. ¿Es posible hacer tal animación fácilmente, o tengo que crear una subclase UIButton y hacer la animación "manualmente"? Si es así, ¿qué método tendría que anular?

¿Fue útil?

Solución

En lugar de simplemente cambiar el título y el objetivo, etc. del botón, tenga dos botones separados que realicen cada acción y se vean diferentes. Luego, cuando presione el botón, llame a un método que elimine el botón actual de su super vista y agregue el nuevo botón a la vista en su lugar. Envuelva eso en algún bloque de animación UIView y debería obtener su animación.

Además, para que esto funcione, deberá configurar la transición de animación en la vista general del botón. Por lo tanto, puede ser útil tener una 'vista de contenedor' como puede ser y luego agregarle botones como subvistas de eso.

El pseudocódigo podría verse así:

[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];

Otros consejos

Una UIView estándar hará lo que quieras. El backgroundColor de UIView es una propiedad animable.

Haría propio '' botón '' subclasificando UIView O alternativamente subclasifica un UIButton y agrégale subvistas. (nota: UIButtons fue un dolor sobre esto en 2.2, no estoy seguro en 3.0)

Necesita un UILabel para cada estado de texto:

UILabel *textForStateOne;
UILabel *textForStateTwo;

Y puede cambiar el color de fondo de la vista principal.

Entonces, crea un método en su nueva clase de botón:

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

  }




}
UIView *btnView4=button;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:btnView4 cache:YES];
[UIView commitAnimations];``
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top