UIView animateWithDuration: animaciones: finalización: aplica transformar, no animar

intentando llamar a este post desde KVO observando. Una vez que una image ha descargado, este post se envía. El post en el bloque de finalización también contiene una animation que funciona correctamente (se anima correctamente). Esta animation aplica la transformación sin que ocurra la animation (espera la duración de la animation, luego solo salta al estado final).

/** * Discover the subview with the supplied tag, attach the fullsize image to the view * scale to fullsize and begin retract. * @param viewTag int - #FUTURE USE# - The tag of the view to be animated. * @param image UIImage - #FUTURE USE# - The image to be applied to the view. * @return void */ - (void)animateViewWithTag:(int)viewTag andImage:(UIImage *)image { Panel *activePanel = [self.panels objectAtIndex:currentIndex]; UIView *activePanelView = [self.view viewWithTag:activePanel.panelId]; // Display the transition to the fullsize version of the panel image. // Determine the scale that needs to be applied to the view to show // the image in the appropriate scaling. If scaled image is greater than // the size of the screen, find the best fit. float scale = image.size.width / activePanelView.frame.size.width; if (image.size.width > self.view.window.frame.size.width || image.size.height > self.view.window.frame.size.height) { // The image will scale beyond the bounds of the window, scale must be adjusted. scale = self.view.window.frame.size.width / activePanelView.frame.size.width; } CGAffineTransform transform = CGAffineTransformMakeScale(scale, scale); [UIView animateWithDuration:1.0 animations:^{ // Get the fullsize image and display it in the growing panel. [activePanelView setTransform:transform]; [NSThread sleepForTimeInterval:3.0]; } completion:^(BOOL finished) { [self retractImage:activePanelView]; }]; } #pragma mark - KVO - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { int tmpInt = (int)context; UIImage *tmpImage = [change objectForKey:NSKeyValueChangeNewKey]; if ( keyPath == @"imgOriginal" ) { [self animateViewWithTag:[(Panel *)object panelId] andImage:tmpImage]; } } 

¿Cuál es el propósito del sueño del hilo?

Si hace que el hilo principal duerma, no actualizará las animaciones mientras tanto.

Y si no está llamando a esto en el hilo principal, tampoco funcionará porque la animation UIKit no es segura para subprocesss y solo puede usarse confiablemente desde el subprocess principal.