Как получить кадр подпредставления в ToViewController во время animateTransition:?
Я использую новые пользовательские переходы, представленные в iOS 7, и я пытаюсь переместить представление из моего "основного" контроллера вида в представление в моем "детализированном" контроллере вида, вроде того, как Photos.app увеличивает изображение, когда вы нажимаете на него, за исключением того, что этот вид в деталях vc занимает только половину экрана. Чтобы сделать это, я пытаюсь анимировать это представление к его окончательному кадру, получая последний кадр из детали или toViewController. Однако кадр, который я получаю, является начальным кадром из Интерфейсного Разработчика для представления toViewController, а не для представления, которое появляется после того, как AutoLayer принял его. Как получить кадр после того, как он был установлен в Auto Layout? Я попытался [self.view layoutSubviews] прямо перед тем, как специальный вид кадра toViewController возвращается в animateTransition: но это все равно дает макет 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]];
}];
}
1 ответ
Вызовите layoutIfNeeded, а не layoutSubviews, для принудительной передачи макета. Затем кадр должен быть обновлен.