2010-06-27 7 views
55

J'essaie d'implémenter un jeu en utilisant le SDK iPhone OS 4.0 (iOS4?). Dans les versions précédentes du SDK, j'ai utilisé [UIView beginAnimations: context:] et [UIView commitAnimations] pour créer des animations. Cependant, quand je regarde la documentation des fonctions dans 4.0, je vois ce commentaire.Quelles sont les méthodes d'animation par blocs dans iPhone OS 4.0?

L'utilisation de cette méthode est déconseillée dans iPhone OS 4.0 et versions ultérieures. Vous devez utiliser les méthodes d'animation par blocs à la place.

Vous pouvez le trouver ici: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/clm/UIView/commitAnimations

Ma question est, quelles sont les animations à base de blocs dans l'iPhone OS 4.0? Je pense que les fonctions beginAnimations: context: et commitAnimations ont été utilisées pour créer des blocs d'animation.

Répondre

42

Si vous suivez ce lien et que vous le faites défiler un peu, vous verrez des méthodes animées nouvelles dans ios4.

animateWithDuration:animations: 
animateWithDuration:animations:completion: 
animateWithDuration:delay:options:animations:completion: 

Il existe également des méthodes de transition connexes. Pour chacun d'eux, l'argument des animations est un block object:

animations
Un objet bloc contenant les modifications engager à la vue. C'est ici que modifie les propriétés animables de les vues dans la hiérarchie de votre vue. Ce bloc ne prend aucun paramètre et n'a aucune valeur de retour . Ce paramètre ne doit pas être NULL.

Block objects font partie de Concurrent Programming

118

J'ai posté un exemple dans mon blog:

CGPoint originalCenter = icon.center; 
    [UIView animateWithDuration:2.0 
      animations:^{ 
       CGPoint center = icon.center; 
       center.y += 60; 
       icon.center = center; 
      } 
      completion:^(BOOL finished){ 

       [UIView animateWithDuration:2.0 
         animations:^{ 
          icon.center = originalCenter; 
         } 
         completion:^(BOOL finished){ 
          ; 
         }]; 

      }]; 

Le code ci-dessus animer un UIImageView * (icône) dans une animation de 2 secondes. Une fois terminée, une autre animation ramènera l'icône à sa position d'origine.

+18

+1 pour l'auto-promotion éhontée (et une bonne réponse :) –

+1

Pourquoi ne pas utilisez '[UIView setAnimationRepeatAutoreverses: YES];' dans le bloc d'animation et 'self.transform = CGAffineTransformIdentity;' dans le bloc d'achèvement? :) –

+1

comment puis-je répéter cette animation? –

20

Voici un exemple très simple. Le code disparaît juste de sortir un UIView et se cache après l'animation se fait:

[UIView animateWithDuration:1.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^ { 
        bgDisplay.alpha = 0.0; 
       } 
       completion:^(BOOL finished) { 
        bgDisplay.hidden = YES; 
       }]; 

ou mise en forme différente:

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^ { 
    bgDisplay.alpha = 0.0; 
} completion:^(BOOL finished) { 
    bgDisplay.hidden = YES; 
}]; 
+0

Juste un heads up que l'option énumérée ci-dessus est obsolète dans 6.0 - http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html – PruitIgoe

+1

Qu'est-ce qui est obsolète dans 6.0 ? Ni UIViewAnimationCurveEaseInOut ni animateWithDuration ne sont marqués comme obsolètes! – cldrr

Questions connexes