2009-11-03 18 views
6

Tiene un código de muestra para la animación UIButton del botón Precio de AppStore -> Comprar. Intenté mucho, pero no funciona bien con CAAnimationGroup (escala + traducción) y no funciona con solo establecerlo en el nuevo tamaño de fotograma en UIView beginAnimations. La animación primero establece el nuevo ancho (immediatelly) y luego el nuevo origen ... por lo que no es el efecto correcto ...Animación del botón de compra de UIButton AppStore

¡Gracias!

Respuesta

5

¿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:

  1. 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.

  2. 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]; 
} 
+0

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

+0

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

+0

Eso funciona a la perfección mi amigo. – iwasrobbed

1

Hay un i De acuerdo con esto cuando utilice un fondo de imagen de tres partes para el UIButton: http://openradar.appspot.com/7290242

Esto primero hará que aparezca el botón a la derecha, luego lo moverá hacia la izquierda. Este enfoque no funcionará

Cuestiones relacionadas