Как получить кадр подпредставления в 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, для принудительной передачи макета. Затем кадр должен быть обновлен.

Другие вопросы по тегам