2012-03-30 30 views
31

Mi piacerebbe avere un'immagine nella mia app per iPhone "pop-in" sullo schermo anziché solo apparire. Con "pop-in" intendo che crescerebbe da un piccolo punto alle sue dimensioni reali. Per riferimento, questo è esattamente uguale all'effetto di animazione "pop" in Keynote. Sono completamente nuovo alle animazioni iOS, quindi se qualcuno mi indicasse nella direzione gli effetti di animazione che avrei bisogno di usare, sarebbe molto apprezzato.iOS - Effetti di animazione - Immagine pop-in

Grazie

Brian

UPDATE Ho aggiunto questo codice dai suggerimenti qui sotto. Funziona ma ridimensiona l'immagine anziché aumentare. Lo so perché ho 0,01 come dimensione della scala di trasformazione, ma mi piacerebbe sapere come posso iniziare con un'immagine di dimensione 0.0 e scala fino a 1. È solo questione di impostare la dimensione della mia immagine in 0? Grazie

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration: 0.2]; 
image.transform = CGAffineTransformMakeScale(0.01, 0.01); 
[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; 

risposta

78

L'effetto che stai cercando è qualcosa di simile:

// instantaneously make the image view small (scaled to 1% of its actual size) 
view.transform = CGAffineTransformMakeScale(0.01, 0.01); 
[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
    // animate it to the identity transform (100% scale) 
    view.transform = CGAffineTransformIdentity; 
} completion:^(BOOL finished){ 
    // if you want to do something once the animation finishes, put it here 
}]; 
+1

Esiste un modo per ridimensionare l'immagine da un punto diverso dal centro? – tiguero

+5

Sì - modifica il suo punto di ancoraggio [layer] (http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html#//apple_ref/doc/c_ref/CALayer) . 'Il comando Vista.layer.anchorPoint = CGPointMake (0, 0) 'renderà la scala della vista dalla sua parte in alto a sinistra; '(1, 1)' è in basso a destra. –

+0

Che tipo di oggetto è l'immagine variabile? –

0

Hai animare la cornice della vista, di riduzione da zero a stato finale. Questo può essere fatto ad esempio con l'animazione del blocco UIView.

Quindi, ad esempio, iniziare con la vista come proprietà di IBOutlet self.myView con la dimensione e la posizione finali, ma impostare la bandiera nascosta. Poi, quando si desidera che appaia utilizzare il seguente:

// Save old frame as final stater and set it to zero size for the start of the animation 
// But keep the same center position, so it just grows and don't move around 
CGRect oldFrame = self.myView.frame; 
CGRect oldCenter = self.myView.center; 

self.myView.frame = CGRectZero; 
self.myView.center = oldCenter; 

self.myView.hidden = NO; 

NSTimeInterval duration = 0.3; 

[UIView animateWithDuration:duration delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
       // New position and size after the animation should be the same as in Interface Builder 
       self.myView.frame = oldFrame 
    } 
        completion:^(BOOL finished){ 
               // You can do some stuff here after the animation finished 
        }]; 
+0

Che ... probabilmente non funzionerà bene. L'animazione della cornice di una vista immagine lo costringe a ridisegnarsi su ogni fotogramma dell'animazione. –

+1

@NoahWitherspoon sarebbe una trasformazione in un modo migliore? – Thyraz

+0

Sì. L'animazione da CGAffineTransformMakeScale (0.01,0.01) a CGAffineTransformIdentity avrebbe funzionato. –

0

Swift 2.0 versione

view.transform = CGAffineTransformMakeScale(0.01, 0.01); 

    UIView.animateWithDuration(0.2, delay: 0, options: .CurveEaseOut, animations: {() -> Void in 
     // animate it to the identity transform (100% scale) 
     self.view.transform = CGAffineTransformIdentity; 

     }) { (finished) -> Void in 
     // if you want to do something once the animation finishes, put it here 
    } 
4

se voglio qualcosa come Facebook fa sul gradimento di qualsiasi post quindi utilizzare questo

-(void)animateButton:(UIButton *)sender{ 
UIButton * btn = (UIButton *)sender; 
[UIView animateWithDuration:0.3/1.5 animations:^{ 
    btn.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.4, 1.4); // scales up the view of button 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:0.3/2 animations:^{ 
     btn.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.7, 0.7);// scales down the view of button 
    } completion:^(BOOL finished) { 
     [UIView animateWithDuration:0.3/2 animations:^{ 
      btn.transform = CGAffineTransformIdentity; // at the end sets the original identity of the button 
     }]; 
    }]; 
}];} 

basta chiamare questo metodo quando si desidera animare la vista

se si dispone di testo e l'immagine sul pulsante e si desidera solo per animare l'immagine del pulsante poi basta sostituire "btn" con "BTN. imageView ", questo produrrà solo l'animazione sulla proprietà vista immagine del pulsante. Spero che aiuti Tutto il meglio.

0

Per questo si dovrà utilizzare un semplice UIView

Aggiungere l'UIView alla visualizzazione corrente.

- (void) initPopUpView 
{ 
    popup.alpha = 0; 
    popup.frame = CGRectMake (160, 240, 0, 0); 
    [self.view addSubview:popup]; 
} 

- (void) animatePopUpShow 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationWillStartSelector:@selector(initPopUpView)]; 

    popup.alpha = 1; 
    popup.frame = CGRectMake (20, 40, 300, 400); 

    [UIView commitAnimations]; 
}