为了清晰起见,编辑了原始帖子
我希望能够控制两个模态视图控制器之间的动画。具体来说,我希望第一个模态向下滑动,第二个模态在其后面淡入。我刚刚观看了关于自定义动画过渡的WWDC视频,我认为这可能就是我想要的。我的想法是,在向下滑动modal1时,我可以淡入modal2(或modal2的图像),然后在动画结束后正常呈现modal2。我不确定这是否是正确的方式,所以我对这些想法持开放态度。
这就是我解雇/提出的方式:
_modal1.modalPresentationStyle = UIModalPresentationCustom;
[_modal1 setTransitioningDelegate:self];
[_modal1 dismissViewControllerAnimated:YES completion:^{
[self presentViewController:_modal2 animated:NO completion:nil];
}];
这是我的委托方法:
- (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed {
return [CustomDismissAnimation new];
}
我尝试过渡:
@implementation CustomDismissAnimation
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext {
UIView *containerView = [transitionContext containerView];
UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];
CGRect containerFrame = containerView.frame;
CGRect fromViewFinalFrame = CGRectMake(0,
containerFrame.size.height,
fromView.frame.size.width,
fromView.frame.size.height);
UIViewController *test = [UIViewController new];
[test setBackgroundColor:[UIColor greenColor]];
test = containerFrame;
[containerView addSubview:test];
[containerView bringSubviewToFront: test];
[UIView animateWithDuration:[self transitionDuration:transitionContext]
animations:^{
[fromView setFrame:fromViewFinalFrame];
}
completion:^(BOOL finished){
[test removeFromSuperview];
[transitionContext completeTransition:YES];
}];
}
@end
我的期望是这个绿色测试视图会出现在modal1后面,因为它在屏幕上向下滑动,但似乎并非如此。它根本没有显示出来。有什么想法吗?
谢谢!
答案 0 :(得分:1)
一个简单的解决方法是,你不能显示2个模态VC,就是只创建一个带有2个视图的模态,前面是旧的,后面是新的(如果你想分离VC,则将newVC设为一个孩子背后的老人),并管理他们之间的隐藏/显示也可以直接做动画到视图
答案 1 :(得分:1)
所以你说A呈现B,然后解散B,然后呈现C,但在解雇B并呈现C时A不应该可见。
一个明显的解决方案是让B呈现C!当你把C降下来的时候,你可以一举一动地从B到A放松。
如果你坚持这种层次结构 - 也就是说,如果A存在B然后C-B和C不能同时占用空间,因为一个视图控制器(A)不能同时呈现两个VC。所以某些东西会在它消失后出现在B后面,然后出现在C后面。但是,你可以自由地说出那是什么;例如,你可以设置一个&#34;调光视图&#34;在A面前。