2011-07-07 27 views

Respuesta

42

El tipo de efectos que se describen como la simulación de un rey de la gravedad/inercia puede ser producido por medio de la facilidad de salida (inicio rápido, extremo lenta) y facilidad de (comienzo lento, extremo rápido) funciones de tiempo

El soporte para facilitar y facilitar el acceso está disponible en iOS, así que no creo que necesite ninguna biblioteca externa ni trabajo (aunque, como se puede imaginar, su efecto necesitará una gran cantidad de ajustes).

Esto animará la traducción de un objeto a una posición dada con un efecto facilidad de salida:

[UIView animateWithDuration:2.0 delay:0 
     options:UIViewAnimationOptionCurveEaseOut 
     animations:^ { 
       self.image.center = finalPosition; 
     } 
     completion:NULL]; 
} 

Si usted maneja su gesto a través de un UIPanGestureRecognizer, el reconocedor gesto le proporcionará dos informaciones importantes para calcule la posición final: velocity y translation, que representan respectivamente la rapidez y la cantidad de movimiento del objeto.

Puede instalar un reconocedor gesto bandeja en su opinión (esto sería el objeto que desea animar, supongo) así:

UIPanGestureRecognizer* panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)]; 
    [yourView addGestureRecognizer:panGestureRecognizer]; 
      [panGestureRecognizer release]; 

Y luego manejar la animación en el controlador:

- (void)handlePanFrom:(UIPanGestureRecognizer*)recognizer { 

    CGPoint translation = [recognizer translationInView:recognizer.view]; 
    CGPoint velocity = [recognizer velocityInView:recognizer.view]; 

    if (recognizer.state == UIGestureRecognizerStateBegan) {  
    } else if (recognizer.state == UIGestureRecognizerStateChanged) { 
     <track the movement> 
    } else if (recognizer.state == UIGestureRecognizerStateEnded) { 
     <animate to final position> 
    } 
} 
+0

¿Qué debo hacer si necesito detener la animación cuando quiero volver a panoramizar antes de que termine la animación? La animación siempre se ejecuta hasta que se complete. – Howard

+0

intente googlear "animaciones interrumpibles" o publique una nueva pregunta (y haga ping en los comentarios aquí si lo desea). – sergio

+0

Descubrí que limpiar la animación antes de que termine hace mi trabajo. Gracias. – Howard

0

No hay nada integrado en iOS que haga esto por usted, pero usted mismo podría implementarlo fácilmente. Comenzaría por crear un reconocedor de gestos que reconozca el gesto "flick" que desea usar, posiblemente algo que busque dirección constante y aumente la velocidad. Cuando reconoces ese gesto, solo tienes que animar la posición de la vista afectada de forma adecuada.

1

iOS no tiene ninguna API incorporada para la gravedad/inercia. Sus mejores opciones son:

  1. simular el efecto con animaciones: si está hojeas un objeto hacia un blanco (que no tiene que rebotar en las cosas), que probablemente podría conseguir un resultado bastante bueno sólo mediante el envío al objetivo y ajustar la curva de sincronización de la animación.

  2. Usa una biblioteca de física. Chipmunk es de alta calidad y hay una gran cantidad de soporte de iOS disponible. Configura objetos, les asigna pesos, describe sus formas y luego el código de la biblioteca le dará coordenadas actualizadas (x, y) para que pueda actualizar sus objetos en la pantalla.

Cuestiones relacionadas