2010-09-08 3 views
5

Sto provando a istigare una transizione di arricciatura pagina con un UIImageView in una finestra. Questo codice è nel mio metodo init principale:Animazione transizione arricciatura pagina 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]; 

L'immagine anima posizione e dimensione ma non arricciatura. Se annoto il commento allo removeFromSuperView, scompare all'istante. Qualche idea?

UPDATE:

hanno cambiato il codice in modo che utilizza Lars modo fantasticlly ordinata di innescare un'animazione e compresa l'animazione e richiamata ...

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

Purtroppo la pagina curl semplicemente non succede . Tuttavia, svanisce.

Non sono sicuro se questo è qualcosa a che fare con la sintassi o il fatto che il SplashImage è una classe UIImageView nell'oggetto UIWindow della mia vista principale. Forse deve essere in un UIView per creare la transizione.

risposta

8

Prova qualcosa di simile:

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

Non testato e forse alcuni errori di sintassi, ma fare un tentativo!

O forse questo è meglio:

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

non ho ancora provato questo, ma io sono incuriosito dal tuo codice! Cosa fa il^do? È un modo di incorporare le funzioni? –

+1

Questi sono blocchi nuovi per iOS 4.0. Ti incoraggio a leggere su blocchi. Ottima aggiunta a iOS. Dai un'occhiata a questo: http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html Se capisco correttamente il tuo codice, quello che vuoi fare è arricciare una pagina e allo stesso tempo spostarti e ridimensionarlo? – LarsJK

+0

beh, lo spostamento e il ridimensionamento non sono molto importanti ... Volevo solo attivare la transizione. Stavo usando quella trasformazione solo per testarlo stava funzionando. Ho solo bisogno che l'immagine splash della pagina si arrotoli via. Per attivare questo come una transizione ho bisogno di fare qualcosa per la vista. Funzionerebbe con "nascosto"? Ad ogni modo, sto facendo alcuni test adesso. Grazie per il vostro feedback –

1

@Larsaronen: Grazie per gli esempi, era esattamente quello che mi serviva! Volevo solo una semplice pagina ricciolo mentre le immagini vengono visualizzate prima, quindi ho usato un alfa di 1,0 invece di 0, e impostare il callback di completamento a zero:

// 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]; 
}