2010-09-08 19 views
5

Estoy intentando instigar una transición de curl de página con un UIImageView en una ventana. Este código está en mi método init principal:Animación de transición de curl de página de iPhone

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.5]; 
[UIView setAnimationDelay:delay]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDidStopSelector:@selector(animCompleteHandler:finished:context:)]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:splashImage cache:YES]; 

splashImage.frame = CGRectMake(-320, 0, 10, 10); 
//[splashImage removeFromSuperview]; 

[UIView commitAnimations]; 

La imagen anima la posición y el tamaño pero no se curva. Si descomiento el removeFromSuperView, desaparece al instante. ¿Algunas ideas?

ACTUALIZACIÓN:

han cambiado el código por lo que utiliza Lars manera ordenada fantasticlly de desencadenar una animación e incluyendo la animación y de devolución de llamada ...

[UIView animateWithDuration:1.5 
         delay:delay 
        options: UIViewAnimationTransitionCurlUp 
       animations:^{splashImage.alpha = 0;} 
       completion:^(BOOL finished){[splashImage removeFromSuperview];} 
]; 

Desafortunadamente el rizo página no sucede . Sin embargo, se desvanece.

no estoy seguro de si esto es algo que ver con la sintaxis o el hecho de que el SplashImage es una clase UIImageView en el UIWindow objeto de mi vista principal. Quizás necesite estar en un UIView para crear la transición.

Respuesta

8

Pruebe algo como:

[UIView transitionWithView:splashImage 
     duration:1.5 
     options: UIViewAnimationOptionTransitionCurlUp 
     animations^{ 
      splashImage.frame = CGRectMake(-320, 0, 10, 10); 
     } 
     completion:^(BOOL finished){ 
      [splashImage removeFromSuperview]; 
      //animCompleteHandlerCode.. 
     } 
]; 

no han sido evaluados y tal vez algunos errores de sintaxis, pero darle una oportunidad!

O tal vez esto es mejor:

[UIView animateWithDuration:1.5 
     delay:delay 
     options: UIViewAnimationOptionTransitionCurlUp 
     animations^{ 
      splashImage.frame = CGRectMake(-320, 0, 10, 10); 
     } 
     completion:^(BOOL finished){ 
      [splashImage removeFromSuperview]; 
      //animCompleteHandlerCode.. 
     } 
]; 
+0

no he intentado esto todavía, pero estoy intrigado por tu código! ¿Qué hace ^? ¿Es esta una manera de incrustar funciones? –

+1

Esos son bloques nuevos para iOS 4.0. Te animo a leer en bloques. Gran adición a iOS. Mira esto: http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html Si entiendo tu código correctamente, lo que quieres hacer es curvar una página y al mismo tiempo mover y escalarlo? – LarsJK

+0

así que mover y escalar no es realmente importante ... Solo quería activar la transición. Estaba usando esa transformación solo para probar que estaba funcionando. Solo necesito que la imagen salte a la página se doble. Para activar esto como una transición, tengo que hacer algo con la vista. ¿Funcionaría con 'oculto'? De todos modos, estoy realizando algunas pruebas ahora. Gracias por sus comentarios. –

1

@Larsaronen: Gracias por los ejemplos, que era exactamente lo que necesitaba! Sólo quería un simple página en bucle mientras que las imágenes se visualizan en primer lugar, por lo que utiliza un alfa de 1,0 en lugar de 0, y la haga la devolución de llamada finalización a cero:

// set a page curl animation for the specified UIImageView control 
- (void) setAnimationPageCurl:(UIImageView *)imageView { 

    [UIView transitionWithView:imageView 
         duration:1.5 
         options:UIViewAnimationOptionTransitionCurlDown 
        animations:^ { imageView.alpha = 1.0; } 
        completion:nil]; 
} 
Cuestiones relacionadas