在视图控制器转换时获取子视图的最终框架

我正在实现iOS 7+视图控制器之间的自定义转换。 特别是,我在视图控制器A和视图控制器B中有相同的button,唯一的区别在于它的位置(它在视图控制器B中稍微高一些)。

我希望在从视图控制器A到视图控制器B的转换中,从A的button向上移动,使它在视图控制器B的最后位置结束。

这里是我的animateTransition:方法:

 - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIView *containerView = [transitionContext containerView]; [containerView insertSubview:toViewController.view belowSubview:fromViewController.view]; UIButton *fromButton = (UIButton *)[containerView viewWithTag:1]; UIButton *toButton = (UIButton *)[containerView viewWithTag:2]; toButton.hidden = YES; [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ fromButton.center = toButton.center; } completion:^(BOOL finished) { toButton.hidden = NO; [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; }]; } 

我看到的问题是toButton.center不是正确的位置。 这就像AutoLayout约束还没有被应用(我得到了与IB一样的帧矩形)。 这会导致在转换完成后,button不会在正确的位置结束。

错误在哪里? 我怎样才能得到从提出的视图控制器的子视图正确的最后一帧? 如果这是不可能的,因为视图控制器B还没有出现,我如何animation子视图来达到这个效果?

在开始animation之前,您可以在您的toViewController视图上调用layoutIfNeeded()。 这应该布局你的子视图,并为你的toButton给你最后的框架。

调整中心的三angular洲,而不是设置绝对中心。