我正在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尚未出现而无法实现,那么我如何设置子视图动画才能实现此效果?
解决方法
在开始动画之前,可以在toViewController的视图中调用layoutIfNeeded().这应该布局您的子视图,并为您提供toButton的最终框架.
原文地址:https://www.jb51.cc/iOS/328448.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。