Mi animation UIView es irregular: ¿cómo puedo optimizar el siguiente código?

En el simulador, mi método de animation se ejecuta sin problemas. Desafortunadamente parece estar muy desigual en un iPhone 4.

No estoy 100% seguro de cuál es la mejor y más rápida manera de hacer animaciones, ¡así que cualquier consejo sobre cómo puedo optimizar o modificar completamente mi código para acelerar esta animation sería muy apreciado!

Notas:

Ya está en el hilo principal, así que hace que la llamada 'dispatch_async (dispatch_get_main_queue ())' sea irrelevante o inútil?

¿Hay alguna forma de preconfigurar esta animation?

¿Hay alguna forma de ver exactamente qué parte del código está haciendo la mayor parte de la ralentización?

Solo hay 3 o 4 vistas en extensionView.subviews.

He comstackdo con -Os.

- (void)extendWithAnimation:(BOOL)animated; { isExtended = YES; extensionView.hidden = NO; topShadowView.hidden = NO; topShadowView.frame = CGRectMake(0, defaultHeight, topShadowView.frame.size.width, topShadowView.frame.size.height); topShadowView.layer.bounds = CGRectMake(0, 0, topShadowView.frame.size.width, 0); extensionView.frame = CGRectMake(0, defaultHeight - 8, DEVICE_WIDTH, extensionHeight + 8); extensionView.layer.bounds = CGRectMake(0, 0, DEVICE_WIDTH, 0); for (UIView *view in extensionView.subviews) { view.transform = CGAffineTransformMakeTranslation(0, -(extensionHeight+8)); } dispatch_async(dispatch_get_main_queue(), ^{ if (animated) { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.3]; [UIView setAnimationDelegate:self]; } extensionView.layer.bounds = CGRectMake(0, 0, DEVICE_WIDTH, extensionHeight + 8); topShadowView.layer.bounds = CGRectMake(0, 0, topShadowView.frame.size.width, extensionHeight + 8); for (UIView *view in extensionView.subviews) { view.transform = CGAffineTransformIdentity; } if (animated) { [UIView commitAnimations]; } }); } 

Solución:

Resuelto (gracias Aaron!).

¡Las sombras rendidas matan la animation a lo grande! No utilices ninguna propiedad de sombra de charts central si estás pensando en animar, en mi caso, solo unas pocas sombras networkingujeron tres veces la velocidad de fotogtwigs.

  1. Bueno, si el código ya está en la queue principal, entonces usar dispatch_async solo tendrá sobrecarga.
  2. No sé si esto ayudará (lo cierto es que lo dudo), pero puedes intentar usar [UIView animateWithDuration:.3 animations:{ code... }];
  3. En mis bashs anteriores para lidiar con las sombras, han tendido a tener un éxito bastante grande. Puede considerar dejar sombras y capas solo y, en su lugar, crear un PNG de sombra networkingimensionable que puede utilizar en un UIImageView colocado detrás de la vista que desea que aparezca en la sombra.

Ejecute su código a través de instrumentos (comience con Time Profiler). ¿Qué llamadas toman la mayor cantidad de time durante la animation?

Una vez que lo haya perfilado, también ejecútelo a través del instrumento Core Animation y habilite la coloración de la representación fuera de la pantalla y del contenido no opaco. Esto ayudará a aislar problemas de charts comunes.

También noto que mencionas sombras. Si está usando las properties de sombra de CALayer, es probable que acabe con su performance. Pero necesitamos más información para realmente resolver esto.