我一直试图解决这个问题八天了。我撕掉了与转换有关的一切,并把它放在它自己的基本项目中:https://github.com/matthijsotterloo/CustomTransitions
当您将应用程序打开到MainViewController(带有标签的黄色)时,我正在尝试创建一种体验,然后可以在其上面滑动页面。当视图滑动到位时,我想以交互方式淡出MainViewController上的按钮。对于上下文,在实际应用中,MainViewController显示3个猴子一个事实,以及两个按钮(见下面的截图)。我试图让这些淡入淡出从1到0的不透明度,而不改变相机视图和不移动按钮(仅动画不透明度)。
我学到的东西: - 添加SwipeablePresentationController.swift以尝试更改shouldRemovePresentersView,以便在ViewController放置在顶部时不会移除presentViewController。 - SwipeableTransitionSlideAnimator回退到toViewController.view,因为iOS似乎有一些错误,其中transitionContext.view(forKey:.to)有时无法正常工作。 - 我将toViewController添加到transitionContext.containerView但不是fromViewController,因为文档说它已经添加了,而apple在示例代码中没有任何地方。此外,我认为添加它会破坏手势识别器。 - 由于MainViewController总是显示,我从不在它上面调用beginAppearanceTransition(viewWill / Did / Disappear / Load) - 我尝试了各种黑客将视图控制器添加到动画完成块中的窗口。这修复了一些错误,但是当一个新的视图控制器出现模态全屏时,iOS似乎不记得该视图控制器被解除后视图的堆栈顺序。
我认为我缺少的是: - 动画后手动将视图控制器添加到窗口。 - 正确调用beginAppearanceTransition。 - 正确配置PresentationController, - 不要从它的超级视图中删除fromView,因为这会禁用UIGestureRecognizer中间滑动。
但不确定它是什么!我知道这很多但是我已经尝试了我能想到的一切,并且非常感谢你们中的任何想法。