button de prensa de animation

Entonces busqué mucho pero no encontré una respuesta para mi problema.

Quiero hacer un button que tenga dos imágenes, la primera image es cuando el button está en estado normal, y el otro cuando está en el estado de resaltado. El problema es que quiero que estas imágenes cambien de manera animada, por ejemplo, la primera image se desvanece, cuando la segunda se desvanece. Y cambian de tal manera que el time de animation permanece constante.

La única forma en que pensé que era hacer un button personalizado, agregar un par de ImageViews y un button para tocar el evento, un ImageView desvanece, otros se desvanecen, en el button de retocar evento, podría hacer lo contrario. Pero este método no parece el más adecuado. ¿Hay una opción mejor que no estoy viendo?

Lo he hecho de la siguiente manera, del mismo modo que Ilker Baltaci lo describió: subclasé UIButton (aunque no es aconsejable porque es un clúster de class) y agregué una function:

 - (void) blinkAndFlipButtonAnimationWithText: (NSString*) buttonText { [UIView animateWithDuration: 0.2 delay: 0 options: UIViewAnimationOptionCurveLinear animations: ^{ self.alpha = 0.1; } completion: ^(BOOL finished) { [UIView animateWithDuration: 0.2 delay: 0 options: UIViewAnimationOptionCurveLinear animations: ^{ self.alpha = 1; } completion: ^(BOOL finished) { [UIView transitionWithView: self duration: 0.25 options: (UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionCurveEaseInOut) animations: ^{ [self setTitle: buttonText forState: UIControlStateNormal]; } completion: ^(BOOL finished) { if ([self.delegate respondsToSelector: @selector(primaCustomButtonDidFinishFlipAnimation:)]) { [self.delegate primaCustomButtonDidFinishFlipAnimation: self]; } } ]; } ]; } ]; } 

¡muchas cascadas de animation en bloques, feo, lo sé! Pero, de todos modos, puede adaptar el bloque de animation a sus necesidades y excluir la callback de los delegates.

luego en su método IBAction / target-action para el button presione simplemente llamar al método, como:

 - (IBAction) facebookButtonPresse: (id) sender { [self.facebookButton blinkAndFlipButtonAnimationWithText: @"+3"]; } 
 UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; myButton.frame = CGRectMake(80, 50, 150, 40); [myButton setTitle:@"Say, Hi!" forState:UIControlStateNormal]; [myButton setBackgroundImage:[UIImage imageNamed:@"xyz.png"] forState:UIControlStateNormal]; [myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:myButton]; -(IBAction)buttonClicked:(UIButton *)sender { [UIView animateWithDuration:0.7f animations:^ { [sender setAlpha:0.5f]; } completion:^(BOOL finished) { [sender setAlpha:1.0f]; [sender setBackgroundImage:[UIImage imageNamed:@"abc.png"] forState:UIControlStateNormal]; } ]; } 

puede configurar la duración de la animation y, también, alfa.

si quieres que se desvanezca / se desvanezca en la animation para el button, puedo replace tu button personalizado con una vista UIImage que tenga la misma image de background que la inicial de Uibutton. Esto será lo primero que debes hacer en la acción del button. Cuando el button se reemplaza con uiview cou puede aplicar la animation de desvanecimiento a UIImageview desde la image de backgorund inicial a nueva (versión seleccionada). Cuando la animation finaliza, en el bloque de finalización comienza otra animation que desvanece el iamge seleccionado con el background normal iamge. Luego, la segunda animation termina con tu uiimageview y agrega el button.

// Declara tu uiimageviews como ivars

  UIImageView *imageViewnormal = [[UIimageView alloc] initWithImage:normalIamge]; UIImageView *imageViewhighlighted = [[UIimageView alloc] initWithImage:highlightImage]; 

En la acción para UIControlEventTouchDown de su button

  // make your button invisible yourbutton.alpha = 0; //add to same rect 2 imageviews with initial and selected backgrounds of uibutton imageViewnormal.alpha = 1; imageViewhighlighted.alpha = 0; [self.view addSubview:imageViewhighlighted]; [self.view addSubview:imageViewnormal]; // newImageViewWithInitialBackground needs to be inserted secondly and alpha value 1 // newImageViewWithSelectedBackground has alpha 0 and is behind newImageViewWithInitialBackground [UIView animateWithDuration:0.3 animations:^ { imageViewnormalalpha = 0; imageViewhighlighted.alpha = 1; } completion:^(BOOL finished) { }]; 

En la acción para UIControlEventTouchUpInside de su button

 [UIView animateWithDuration:0.3 animations:^ { imageViewnormal.alpha = 1; imageViewhighlighted.alpha = 0; } completion:^(BOOL finished) { //Remove both of the uiimageviews aand make your button visible [imageViewnormal removeFromSuperview]; [mageViewhighlighted removeFromSuperview]; yourbutton.alpha = 1; }]; 

use el siguiente código, funciona correctamente, utilicé este código en mi proyecto:

  UIButton *myButton=[UIButton buttonWithType:UIButtonTypeRoundedRect]; myButton.frame=CGRectMake(40, 20, 80, 25); [myButton setImage:[UIImage imageNamed:@"normalImage.png"] forState:UIControlStateNormal]; [myButton setImage:[UIImage imageNamed:@"highlightedImage.png"] forState:UIControlStateHighlighted]; [myButton addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:myButton]; 

xCódigo 7, iOS9

 //for zoom in [UIView animateWithDuration:0.5f animations:^{ self.sendButton.transform = CGAffineTransformMakeScale(1.5, 1.5); } completion:^(BOOL finished){}]; // for zoom out [UIView animateWithDuration:0.5f animations:^{ self.sendButton.transform = CGAffineTransformMakeScale(1, 1); }completion:^(BOOL finished){}];