2010-09-08 4 views
5

Ich versuche, eine Seite curl Übergang mit einem UIImageView in einem Fenster anzuregen. Dieser Code ist in meiner Hauptinitialisierungsmethode:iPhone Seite curl Übergang Animation

[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]; 

Das Bild animiert Position und Größe, aber keine Locke. Wenn ich die removeFromSuperView auskommentieren, verschwindet sie sofort. Irgendwelche Ideen?

UPDATE:

Haben Sie den Code geändert, so dass es Lars fantasticlly nette Art und Weise verwendet eine Animation auszulösen und einschließlich der Animation und Rückruf ...

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

Leider ist die Seite curl einfach nicht passieren, . Es verblasst aber.

Ich bin nicht sicher, ob dies etwas ist mit der Syntax oder der Tatsache, dass die SplashImage eine UIImageView Klasse im UIWindow Objekt meiner Hauptansicht zu tun. Vielleicht muss es in einer UIView sein, um den Übergang zu erstellen.

Antwort

8

Versuchen Sie so etwas wie:

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

Nicht getestet und vielleicht einige Syntaxfehler, aber versuchen Sie es mal!

Oder vielleicht ist das besser:

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

Ich habe das noch nicht versucht, aber ich bin fasziniert durch deinen Code! Was macht das? Ist das ein Weg, Funktionen zu integrieren? –

+1

Das sind neue Blöcke für iOS 4.0. Ich ermutige Sie, auf Blöcke zu lesen. Tolle Ergänzung zu iOS. Schauen Sie sich das an: http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html Wenn ich Ihren Code richtig verstehe, was Sie tun möchten, ist eine Seite zu curlen und gleichzeitig bewegen und skalieren Sie es? – LarsJK

+0

gut das Verschieben und Skalieren ist nicht wirklich wichtig ... Ich wollte nur den Übergang auslösen. Benutzte diese Transformation, nur um zu testen, dass es funktionierte. Ich brauche nur das Splash-Bild, um die Seite wegzurollen. Um dies als Übergang auszulösen, muss ich etwas zur Ansicht machen. Würde es mit "versteckt" funktionieren? Jedenfalls mache ich jetzt ein paar Tests. Vielen Dank für Ihr Feedback. –

1

@Larsaronen: Danke für die Beispiele, es war genau das, was ich brauche! Ich wollte nur eine einfache Seite locken, während Bilder zuerst angezeigt werden, so habe ich ein Alpha von 1,0 anstelle von 0, und setzen Sie den Abschluss Rückruf nil:

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