quitar ocultar estado desaparece como barra iphone cocoa-touch animation uiscrollview modal-dialog

ocultar - desaparece barra de estado iphone



iPhone: no se puede animar contenidoInset mientras se anima la barra de navegaciĆ³n mostrar/ocultar (1)

Encontré una solución, pero no es ideal. Espero para mostrar la barra de navegación después de que el recuadro termine de animar. Todavía tengo curiosidad si es posible la animación simultánea. También me gustaría saber si es posible hacer lo contrario. (Llamar a la animación insertada después de que la barra de navegación haya terminado de animar)

Aquí está el código para mi solución:

Esto está en el controlador de vista de tabla:

- (void)modalDismissed { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(modalDismissedEnded:finished:context:)]; self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 0, 0); [UIView commitAnimations]; } - (void)modalDismissedEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context { [[NSNotificationCenter defaultCenter] postNotificationName:@"InsetFinishedAnimating" object:nil]; }

Luego esto en el controlador de Nav:

- (void)viewDidLoad { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modalDismissed) name:@"InsetFinishedAnimating" object:nil]; [super viewDidLoad]; } - (void)modalDismissed { [self setNavigationBarHidden:NO animated:YES]; }

En mi aplicación, tengo una vista de tabla. Cuando el usuario hace clic en un botón, una UIView superpone parte de esa vista de tabla. Es esencialmente un modal parcial. Esa vista de tabla es intencionalmente desplazable mientras ese modal está activo. Para permitir que el usuario se desplace hasta la parte inferior de la vista de tabla, modifico los valores contentInset y scrollIndicatorInsets para ajustar el área más pequeña sobre el modal. Cuando se quita el modal, restablezco esos valores de inserción.

El problema es que cuando el usuario se desplaza hacia la parte inferior del recuadro recién ajustado y luego descarta el modal, la vista de tabla salta abruptamente a una nueva posición de desplazamiento porque el recuadro se cambia instantáneamente. Me gustaría animarlo para que haya una transición, pero los métodos beginAnimation / commitAnimations no lo afectan por alguna razón.

Editar: Más información. Encontré el conflicto. Al presentar el modal, también oculto la barra de navegación. La barra de navegación anima de forma nativa la vista de tabla hacia arriba y hacia abajo a medida que se muestra y se oculta. Cuando dejo de animar la barra de navegación, la animación insertada funciona bien. ¿Alguien sabe lo que puedo hacer para evitar este conflicto? ¿Debo esperar a que termine la animación de la barra de navegación antes de ajustar el recuadro? Si es así, ¿cómo puedo engancharme a eso?

¡Cualquier ayuda es muy apreciada!

El código relevante del controlador de vista de tabla está aquí:

- (void)viewDidLoad { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modalOpened) name:@"ModalStartedOpening" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modalDismissed) name:@"ModalStartedClosing" object:nil]; [super viewDidLoad]; } - (void)modalOpened { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.5]; [UIView setAnimationDelegate:self]; self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 201, 0); self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 201, 0); [UIView commitAnimations]; } - (void)modalDismissed { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.5]; [UIView setAnimationDelegate:self]; self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 0, 0); [UIView commitAnimations]; }