2010-02-25 13 views
49

Ho un UIView principale in cui visualizzo dati diversi. Poi ho messo un pulsante, che visualizza visualizzazione secondaria in questo modo:addSubview animation

- (IBAction) buttonClicked:(id)sender 
{ 
    UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(25,25,50,20)]; 
    UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(25,25,50,25)]; 
    newLabel.text = @"some text"; 
    [newView addSubview:newLabel]; 

    [self.view addSubview:newView]; 
    [newLabel release]; 
    [newView release]; 
} 

newView appare bene, ma non anima per sé alcun modo, semplicemente appare immediatamente. Come posso aggiungere qualche tipo di animazione quando appare newView? Come zoom o slide down o qualcosa del genere. C'è un codice semplice?

risposta

76

Hi è possibile utilizzare le animazioni UIView:

[newView setFrame:CGRectMake(0.0f, 480.0f, 320.0f, 480.0f)]; //notice this is OFF screen! 
[UIView beginAnimations:@"animateTableView" context:nil]; 
[UIView setAnimationDuration:0.4]; 
[newView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)]; //notice this is ON screen! 
[UIView commitAnimations]; 

L'SDK sarà ora capire questo per voi e per animare la vista le posizioni che ha dato. Questo funziona per la maggior parte delle proprietà di UIViews: alfa, scala, limiti, cornici, ecc

ci sono anche costruire in animazioni come a fogli mobili e ricciolo:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
          forView:newView 
          cache:YES]; 

[self.navigationController.view addSubview:settingsView.view]; 
[UIView commitAnimations]; 

Spero che questo aiuti fuori ottenere iniziare :)

+0

fresco, grazie, che ha funzionato bene – Mike

+0

Mentre il primo esempio è tecnicamente valida si forma scadente considerando la grande quantità di dimensioni dello schermo che è necessario sostenere oggi e quindi mi sento di raccomandare o rispondere alla seconda uno o @ di adedoy – Sirens

22

Link contro quadro QuarzCore

#import <QuartzCore/QuartzCore.h> 

CATransition *transition = [CATransition animation]; 
transition.duration = 1.0; 
transition.type = kCATransitionPush; //choose your animation 
[newView.layer addAnimation:transition forKey:nil]; 
[self.view addSubview:newView]; 
+1

+1 Puoi anche utilizzare i sottotipi di transizione per personalizzare ulteriormente la transizione.https: //developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CATransition_class/#//apple_ref/doc/constant_group/Common_Transition_Subtypes – anoop4real

79

questo è per l'utilizzo consigliato:

+1

Hey @adedoy come usare l'animazione giusta senza il flip possibile ?? come pushviewcontroller ............ –

19

Ho scoperto che anche con i blocchi di animazione e le opzioni, provare ad animare addSubview da solo non avrebbe fatto nulla per me. Ho trovato una soluzione alternativa che consiste nel impostare l'alpha della sottoview su 0.0, aggiungere la sottoview e quindi animare l'impostazione dell'alfa da 0.0 a 1.0. Questo mi dà la dissolvenza che stavo cercando.

Spero che questo aiuti qualcun altro.

UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)]; 
redView.backgroundColor = [UIColor redColor]; 
redView.alpha = 0.0; 

[self.view addSubview:redView]; 

[UIView animateWithDuration:0.5 animations:^{ 
    redView.alpha = 1.0; 
}]; 
+0

risposta perfetta per dissolvere in una vista – Fattie

10

Facciamo ciò in modo rapido.

var redView = UIView(frame:CGRectMake(20,20,100,100)) 
redView.backgroundColor = UIColor.redColor 
redView.alpha = 0.0 
view.addSubview(redView) 

UIView.animateWithDuration(0.25) {() -> Void in 
    redView.alpha = 1.0 
} 

Aggiunta di una visualizzazione secondaria non può essere animato semplicemente mettendo in un blocco animateWithDuration. E non può essere animato usando nascosto.