我正在实现iOS 7+中视图控制器之间的自定义过渡。具体来说,我在视图控制器A和视图控制器B中都有相同的按钮,唯一的区别是它们的位置(视图控制器B中的按钮略高一些)。
我希望在从视图控制器A过渡到视图控制器B时,来自A的按钮向上移动,以便在视图控制器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中相同的框架矩形)。这导致转换完成后按钮不会以正确的位置结束。
错误在哪里?如何从呈现的视图控制器获取子视图的正确最终框架?如果这不可能,因为视图控制器B尚未出现,那么如何动画化子视图以实现此效果?