iPhone - UINavigationController - animação personalizada com CATransaction
Estou tentando criar uma categoria para UINavigationController para que eu possa montar algumas animações personalizadas. Me depareiessa questão e isso me fez começar. Eu vim com o seguinte para uma função push:
- (void)pushViewControllerMoveInFromBottom:(UIViewController *)viewController {
[CATransaction begin];
CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromBottom;
transition.duration = 0.7;
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[self pushViewController:viewController animated:YES];
[CATransaction commit];
}
Não entendo qual visualização / camada está sendo acessada por meio da chamada de subvisão. Então, se alguém pudesse me ajudar a entender isso, isso seria útil. Parece estar afetando qualquer visão que esteja prestes a aparecer na tela.
Masminha pergunta principal é que estou tentando criar um pop que "desfará" a função acima. Para maior clareza, digamos que eu tenha duas visualizações, A e B. A é a primeira visualização exibida na tela. A função acima se moverá em B sem empurrar A para fora. Muito parecido com uma visão modal. Mas a função abaixo desliza A de volta sobre B, em vez de deslizar B para cima e deixar A no lugar.
- (void)popViewControllerMoveInFromTop {
[CATransaction begin];
CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromTop;
transition.duration = 0.7;
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[self popViewControllerAnimated:YES];
[CATransaction commit];
}
Não quero usar uma exibição modal e prefiro não usar blocos de animação personalizados para alterar o quadro das exibições.