2010-02-25 17 views
49

Tengo UIView principal donde visualizo datos diferentes. A continuación os pongo un botón, que muestra subvista así: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 parece estar bien, pero no animarse ninguna manera, sólo aparece inmediatamente. ¿Cómo puedo agregar algún tipo de animación cuando aparece newView? Como hacer zoom o deslizarse hacia abajo o algo así. ¿Hay algún código simple?

Respuesta

76

Hola Usted puede utilizar las animaciones 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]; 

El SDK ahora resolver esto para usted y animar la vista a las posiciones que le dio. Esto funciona para la mayoría de las propiedades de UIViews: alfa, escala, límites, marcos, etc.

También se construyen en animaciones en forma de tapa y rizo:

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

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

Espero que esto ayude a cabo conseguir que comenzó :)

+0

fresco, gracias, que funcionaba bien – Mike

+0

Mientras que el primer ejemplo es técnicamente válida se forma pobre teniendo en cuenta la gran cantidad de tamaños de pantalla que necesita para apoyar hoy y por lo que recomiendo ya sea responder a la segunda uno o @ de adedoy – Sirens

22

enlace contra el marco 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 También puede usar subtipos de transición para personalizar aún más la transición.https: //developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CATransition_class/#//apple_ref/doc/constant_group/Common_Transition_Subtypes – anoop4real

79

esto es para uso recomendado:

[UIView transitionWithView:containerView duration:0.5 
     options:UIViewAnimationOptionTransitionCurlUp //change to whatever animation you like 
     animations:^ { [containerView addSubview:subview]; } 
     completion:nil]; 
+1

Hola @adedoy ¿Cómo es posible utilizar la animación correcta sin voltear? como pushviewcontroller ............ –

19

Encontré que incluso con los bloques de animación y las opciones, intentar animar addSubview solo no haría nada por mí. Encontré una solución que consiste en establecer el alfa de la subvista en 0.0, agregar la subvista y luego animar la configuración del alfa de 0.0 a 1.0. Esto me da el efecto de desvanecimiento que estaba buscando.

Espero que esto ayude a alguien más.

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

respuesta perfecta para disolver en una vista – Fattie

10

Hagamos esto en swift.

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 
} 

Adición de una vista secundaria no puede ser animado con sólo poner en un bloque animateWithDuration. Y no puede ser animado usando oculto.