2010-06-27 6 views
55

Estoy tratando de implementar un juego con el iPhone OS 4.0 (iOS4?) SDK. En las versiones anteriores del SDK, he estado usando [UIView beginAnimations: context:] y [UIView commitAnimations] para crear algunas animaciones. Sin embargo, cuando miro la documentación de las funciones en 4.0, veo este comentario.¿Qué son los métodos de animación basados ​​en bloques en iPhone OS 4.0?

Se desaconseja el uso de este método en iPhone OS 4.0 y posterior. Debería usar los métodos de animación basados ​​en bloques .

usted lo puede encontrar aquí: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/clm/UIView/commitAnimations

Mi pregunta es, ¿cuáles son las animaciones basadas en bloques en el iPhone OS 4.0? Pensé que las funciones beginAnimations: context: y commitAnimations se usaban para crear bloques de animación.

Respuesta

42

Si sigues ese enlace y te desplazas un poco hacia arriba, verás nuevos métodos animados en ios4.

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

También hay algunos métodos de transición relacionados. Para cada uno de estos, el argumento animaciones es un block object:

animaciones
Un objeto de bloques que contiene los cambios a comprometerse a las vistas. Aquí es donde programáticamente cambia las propiedades animables de las vistas en la jerarquía de su vista. Este bloque no toma parámetros y no tiene valor de retorno. Este parámetro no debe ser ser NULL.

Block objects son parte de Concurrent Programming

118

He publicado un ejemplo en mi 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){ 
          ; 
         }]; 

      }]; 

El código anterior se animará una UIImageView * (icono) en una de 2 segundos de animación. Una vez completado, otra animación moverá el ícono a su posición original.

+18

+1 para la auto-promoción descarada (y una buena respuesta :) ¿Por qué no –

+1

use '[UIView setAnimationRepeatAutoreverses: YES];' en el bloque de animación y 'self.transform = CGAffineTransformIdentity;' en el bloque de finalización? :) –

+1

¿Cómo puedo repetir esta animación? –

20

Aquí hay un ejemplo muy simple. El código sólo se desvanece a cabo una UIView y lo oculta después de la animación se realiza:

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

o en diferente formato:

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

Solo un aviso de que la opción enumerada arriba está en desuso en 6.0 - http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html – PruitIgoe

+1

¿Qué es exactamente lo que está en desuso en 6.0? ? ¡Ni UIViewAnimationCurveEaseInOut ni animateWithDuration está marcado como obsoleto! – cldrr

Cuestiones relacionadas