【发布时间】:2014-11-03 08:23:49
【问题描述】:
我正在尝试在 iOS 中制作自定义展开视图控制器动画。
这是一个 iPad 应用程序,在主屏幕上有一个大小为 160*160 的大方形按钮。我已将模态转场连接到下一个视图控制器场景。我想要实现的是,当我点击 UIButton 时,目标视图控制器应该从按钮展开,并且应该在动画完成后动画到全屏。
我继承了 NSObject 并创建了 ExpandAnimationController,实现了 transitionDuration 和 animateTransition 方法。但是我被困在一个点来确定目标视图控制器视图的初始帧。
我知道对于一个按钮,我可以静态设置框架,但是在某个场景中出现多个按钮并且每个按钮必须以模态方式连接到不同的视图控制器,而不是如何将按钮框架传递给动画控制器设置初始视图框架。
在尝试了 raywanderlich 的自定义视图控制器转换教程之后,我这样做只是为了学习目的。所以现在的问题是从“源控制器到动画控制器”传递一个帧对象。我已经搜索过,互联网上没有太多自定义转换问题。任何帮助将不胜感激。
这是我在 ExpandAnimationController 中尝试过的代码,
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
// 1. Fetch all the required objects.
UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIView *containerView = [transitionContext containerView];
CGRect finalFrame = toVC.view.frame;
// 2. Set initial frames.
// This is where I am stuck.
CGRect initialFrame = CGRectZero;
toVC.view.frame = initialFrame;
[containerView addSubview:toVC.view];
// 3. Do the animation.
NSTimeInterval duration = [self transitionDuration:transitionContext];
[UIView animateWithDuration:duration animations:^{
fromVC.view.alpha = 0.5;
toVC.view.alpha = 0.5;
toVC.view.frame = finalFrame;
} completion:^(BOOL finished) {
fromVC.view.alpha = 1.0;
toVC.view.alpha = 1.0;
toVC.view.frame = finalFrame;
[transitionContext completeTransition:YES];
}];
}
在我采用UIViewControllerTransitioningDelegate的源控制器中,创建了一个ExpandAnimationController实例并使用如下,
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source {
return _expandAnimationController;
}
但在调用 prepareForSegue 之后,我想将发送者按钮帧传递给过渡动画控制器。
提前致谢,编码愉快!!
【问题讨论】:
-
发布你的代码,让我们看看你到目前为止做了什么
-
@Lefteris 嘿,我已按照您的要求编辑了帖子并添加了代码,请查看。
标签: ios objective-c iphone animation