¿Estás haciendo los cambios dentro del bloque Core Animation?
Creé una aplicación de iPhone basada en vista simple para probar esto. La vista tiene dos objetos redondeados rect UIButton:
El primer botón está en la esquina superior derecha con un ancho de 62 (y la altura 35) y el título inicial "$ 0.99". Está conectado a la salida de "botón" y a la acción "animar" en el controlador de visualización. Este es el botón que se animará cuando se toque.
El segundo botón está en la parte inferior de la pantalla con el título "Restablecer" y está conectado a la acción "reiniciar" en mi controlador de vista.
Aquí es el código de controlador de vista:
UIButtonAnimationTestViewController.h:
#import <UIKit/UIKit.h>
@interface UIButtonAnimationTestViewController : UIViewController {
IBOutlet UIButton *button;
CGRect originalFrame;
}
- (IBAction)animate;
- (IBAction)reset;
@end
UIButtonAnimationTestViewController.m:
#import "UIButtonAnimationTestViewController.h"
@implementation UIButtonAnimationTestViewController
- (void)viewDidLoad {
[super viewDidLoad];
originalFrame = button.frame;
}
- (IBAction)animate {
CGRect frame = button.frame;
frame.origin.x -= 30;
frame.size.width += 30;
[UIView beginAnimations:@"button" context:nil];
button.frame = frame;
[button setTitle:@"" forState:UIControlStateNormal];
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[button setTitle:@"BUY NOW" forState:UIControlStateNormal];
}
- (IBAction)reset {
button.frame = originalFrame;
[button setTitle:@"$0.99" forState:UIControlStateNormal];
}
no crea el efecto correcto para mí. El ancho se establece primero, por lo que el botón se mueve a la nueva posición después. En AppStore, la posición X derecha de las esquinas correctas siempre permanece en su posición, * como * una escala y una traducción al mismo tiempo. – erazorx
Mi código funciona como la AppStore: el lado derecho del botón no se mueve. Como estamos haciendo ambos cambios (traducir a la izquierda y aumentar el ancho) a una copia del cuadro y luego cambiar el marco del botón dentro del bloque de animación, ambos cambios deben animarse al mismo tiempo. – gerry3
Eso funciona a la perfección mi amigo. – iwasrobbed