2009-11-03 15 views
6

Avete un codice di esempio per l'animazione UIButton del prezzo di AppStore -> per acquistare. Ho provato molto, ma non funziona bene con CAAnimationGroup (scale + traduzione) e non funziona semplicemente impostandolo sul nuovo frame-size in un UIView beginAnimations. L'animazione prima imposta la nuova larghezza (immediatamente) e quindi la nuova origine .. quindi non è l'effetto giusto ...UIButton AppStore buy button animation

Grazie!

risposta

5

Stai apportando le modifiche all'interno del blocco Animazione principale?

Ho creato un'applicazione per iPhone basata su una vista semplice per verificarlo. La vista ha due arrotondati oggetti rect UIButton:

  1. il primo pulsante è in alto a destra con larghezza 62 (altezza e 35) e il titolo iniziale "$ 0.99". È collegato all'uscita "pulsante" e all'azione "animato" nel controller della vista. Questo è il pulsante che verrà animato quando viene toccato.

  2. Il secondo pulsante si trova nella parte inferiore dello schermo con il titolo "Reset" ed è collegato all'azione "reset" nel mio controller di visualizzazione.

Ecco il codice vista del regolatore:

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

non crea l'effetto giusto per me. La larghezza viene impostata per prima, quindi il pulsante si sposta in seguito nella nuova posizione. In AppStore, la posizione dell'asse destro degli angoli retti rimane sempre nella loro posizione, * come * una scala e una traduzione allo stesso tempo. – erazorx

+0

Il mio codice funziona come AppStore: il lato destro del pulsante non si sposta. Poiché stiamo apportando entrambe le modifiche (trasla a sinistra e aumenta la larghezza) a una copia del fotogramma e quindi modificando la cornice del pulsante all'interno del blocco di animazione, entrambe le modifiche devono essere animate contemporaneamente. – gerry3

+0

Che funziona perfettamente amico mio. – iwasrobbed

1

C'è un i usa questo quando usi uno sfondo di immagine in tre parti per UIButton: http://openradar.appspot.com/7290242

Questo farà prima saltare il pulsante a destra, quindi spostarlo a sinistra. Questo approccio non funziona