ios - ¿Cómo obtengo el marco de una subvista en ToViewController durante animateTransition:?
objective-c autolayout (1)
Llame a layout IfNeeded, no a layoutSubviews, para forzar un pase de diseño. Entonces el marco debe ser actualizado.
Utilizo las nuevas transiciones personalizadas introducidas con iOS 7 y trato de mover una vista desde mi controlador de vista "maestro" a una vista en mi controlador de vista "detallada", como cuando Photos.app amplía una foto cuando toca sobre él, excepto esta vista en el detalle vc solo ocupa la mitad de la pantalla. Para hacer esto, intento animar esta vista a su fotograma final obteniendo el fotograma final del detalle o de ViewController. Sin embargo, el marco que obtengo es el marco inicial del Constructor de interfaces para la vista de toViewController y no la vista que aparece después de que AutoLayer ha dado un paso hacia él. ¿Cómo obtengo el marco una vez que ha sido configurado por Diseño automático? He intentado [self.view layoutSubviews] justo antes de que el marco de vista especial toViewController se devuelva a animateTransition: pero eso todavía le da el diseño de IB.
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
[[transitionContext containerView] addSubview:toViewController.view];
toViewController.view.alpha = 0;
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
fromViewController.view.alpha = 0;
toViewController.view.alpha = 1;
fromViewController.specialView = [toViewController detailSpecialViewFrame];
} completion:^(BOOL finished) {
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}