¿Cómo crear una animation compleja con un mejor performance en iOS?

Todas las animaciones significan cambio de layer.transform o properties de frame . Hay 2 preguntas principales sobre el performance:

  1. Tengo varias vistas que debería animar simultáneamente. ¿Qué es mejor: crear múltiples bloques animateWithDuration o crear uno de esos bloques e iterar las vistas en él?

  2. Mi animation requiere cálculos complejos y necesito llamar a animateWithDuration suficiente. ¿Debo realizar todos los cálculos antes del bloque de animation o no hay ninguna diferencia para el performance?

Nadie ha respondido todavía. Entonces, respondo mi propia pregunta y la corregirás si me equivoco.

  1. Recomiendo solo un bloque. El habitual animateWithDuration:animations: no admite animaciones simultáneas correctamente (al less en mi caso causó algunos problemas). Sugiero utilizar RZViewActions en su lugar; utiliza un enfoque más complejo con dispatch_group_t para animaciones simultáneas (y acciones en general). En la última versión, ni siquiera es necesario preparar grupos / secuencias antes de comenzar la animation.

  2. La única diferencia que veo es el código externo animateWithDuration:animations: se realiza en el mismo ciclo NSRunLoop y si lo NSRunLoop dentro del bloque animation, se calculará en el siguiente ciclo. Por ejemplo, será útil colocar los cálculos fuera del bloque si a veces no desea iniciar la animation de acuerdo con los resultados de estos cálculos.

    Por otro lado, puede ralentizar el ciclo actual, que generalmente es más crítico que el performance más lento del siguiente ciclo. Además, debe pensar en las variables que necesita para pasar al bloque correctamente.

    En ambos casos, la animation no se iniciará hasta el final del bloque de animation. Por lo tanto, si configura alguna variable visual (por ejemplo, el marco de la vista), se configura como normalmente y puede usarla de una vez. Pero este valor no se representa hasta el comienzo del bloque de finalización. Entonces con animateWithDuration:animations: verá el valor inicial y el final. Incluso si la animation se interrumpe, salta al valor final de una vez (es el comportamiento pnetworkingeterminado si no especifica opciones adicionales).