programas personajes para modelos hacer escardo crear apps app animadores animaciones animacion iphone animation uiview uiviewcontroller

personajes - Iphone SDK-Animar subvista



hacer animaciones 3d en android (4)

Actualizado para su situación:

En cambio, tiene cuatro puntos de vista:

  1. Una vista de respaldo

  2. La vista principal

  3. La vista posterior (panel de opciones) 100 píxeles

  4. La vista frontal (vista en blanco) 100 píxeles

Agregue la vista principal a la vista de respaldo de forma normal.

Agregue la vista frontal a la vista de respaldo donde le gustaría que aparezca el panel de opciones.

asegúrese de que la vista frontal y posterior tengan el mismo marco.

Utilice el mismo código que a continuación utilizando los métodos flip the front y back views.

Respuesta original

Necesita 3 visitas:

  1. Una vista de respaldo

  2. La vista frontal

  3. La vista trasera

La vista de respaldo solo sostiene a los otros 2 mientras se mueven hacia atrás y adelante. A continuación están los métodos de volteo. Los coloco a los dos en el respaldo de ViewController:

- (void)displayBack{ //parent controller is an ivar so the sub-view controllers know who their daddy is backController.parentController = self; [UIView beginAnimations:nil context:@"flipTransitionToBack"]; [UIView setAnimationDuration:1.2]; //note self.view IS the backing view [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; //remove the front view [[frontController view] removeFromSuperview]; //add the back view view [self.view addSubview:[backController view]]; [UIView commitAnimations]; //giving a heads up to the view that is about to come on screen [backController viewWillAppear:YES]; } - (void)displayFront{ [UIView beginAnimations:nil context:@"flipTransitionToFront"]; [UIView setAnimationDuration:1.2]; [UIView setAnimationDelegate:self]; //I''m interested in knowing this has happened [UIView setAnimationDidStopSelector:@selector(flipAnimationDidEndWithID:finished:context:)]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES]; //remove back view [[backController view] removeFromSuperview]; //add the front view [self.view addSubview:[frontController view]]; [UIView commitAnimations]; }

Tengo una vista que tiene un UIWebView y un panel de opciones (UIViewController personalizado con vista personalizada).

Quiero que se muestre la vista para que el panel de opciones (ubicado en la parte superior de la vista principal) se COLOQUE en su lugar. Estoy usando el código, y estoy obteniendo un resultado extraño.

La PRIMERA vez que se muestra la vista, el panel de opciones parece ya estar visible ... Cuando presiono ATRÁS en mi navController, y vuelvo a abrir la Vista, la animación funciona perfectamente.

¿Alguien puede arrojar algo de luz sobre este tema?

- (void)viewDidLoad { [super viewDidLoad]; optionsPane=[[OptionsPaneController alloc] initWithNibName:@"OptionsPane" bundle:nil]; } - (void)viewWillAppear:(BOOL)animated { [optionsPane.view removeFromSuperview]; [self checkOptionsVisible]; } -(void)checkOptionsVisible{ [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.5]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:[optionsPane view] cache:YES]; [[self view] addSubview:[optionsPane view]]; [theWebView setFrame:CGRectMake(0,87,320,230)]; [[optionsPane view] setFrame:CGRectMake(0,0,320,87)]; [UIView commitAnimations]; }


Hmm, no creo que el mensaje viewWillAppear se envíe la primera vez. Hay dos cosas que leo en el SDK . Debería llamar al súper dentro de ese mensaje y hay una gran advertencia que puede aplicarse a su primera vez:

Advertencia: si la vista que pertenece a un controlador de vista se agrega a una jerarquía de vista directamente, el controlador de vista no recibirá este mensaje. Si inserta o agrega una vista a la jerarquía de vista y tiene un controlador de vista, debe enviar este controlador directamente al mensaje asociado. Si no se envía el controlador de vista, este mensaje evitará que se muestre ninguna animación asociada.

En última instancia, correría a través del depurador y me aseguraré de que el mensaje viewWillAppear se envíe cuando usted lo crea.


La propiedad view en un UIViewController está cargada de forma perezosa: incluso cuando se inicia con una punta como lo está haciendo aquí, la vista en sí misma no se instancia hasta la primera vez que se accede a la propiedad.

Es difícil saber exactamente qué sucede sin ver más código, pero puede obtener los resultados que desea si accede a optionsPane.view en viewDidLoad (no necesita hacer nada con él, solo acceda a la propiedad para forzar la carga).


Si entiendo lo que explicas, tuve un problema muy similar el otro día.

Lo que sucede en la primera carga es que viewDidLoad se dispara primero. cargar el archivo nib tarda un poco más de tiempo de lo que tarda la vista en aparecer para dispararse.

Lo que estamos obteniendo es una carga de plumín después de que viewWillApper ya se haya retirado.

En cualquier carga después de eso, viewDidLoad no se activará, permitiendo que viewWillAppear haga su fiel trabajo de volteo.

¿Qué hacer?
Primero, intente cambiar su código para usar "viewDidAppear". Eso debería ayudar, pero debes ver si se ve bien.

Otra opción (una fea, lo sé) es llamar a checkOptionsVisible en viewDidLoad también.
Si no es de esa ayuda, consideraría un temporizador como un truco, si los requisitos lo permiten.

Espero que te acerques para resolver el problema.