最近几天一直在整转场动画,以前觉得很难,在实际操作之后,发现开发过程中,我们所需要做的,也就是两个View(fromview 和 toview)在ContainView上的动画而已,控制动画过程这些操作,我们只需要实现代理,苹果已经帮我们写好,直接调用就行!
过程中遇到以下几个点,Mark下:
iOS13后present转场有了很大的变化,图层改变了。iOS13之前,presentedView即为presentedController的view,iOS13之后改成了新View,将presentedController的view作为新View的子视图,并且在新View上,添加了一个Pan手势。
push: ApushB,使用转场动画,会使B的系统侧滑手势失效,我的理解是这样,不对求指出:系统侧滑手势是自带了delegate的,是私有类_UINavigationInteractiveTransition的一个实例,而这个实例,正是NavigationController的私有属性_cachedInteractionController,而我们做转场动画,有实现
- (nullable id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController interactionControllerForAnimationController:(id) animationController 这个方法,替换了delegate的实例,所以导致侧滑手势失效。
佐证:当ApushB使用转场动画,上面方法返回nil,B的系统侧滑手势还是OK的!
注意:ApushB自定义转场后,B返回A,A的侧滑会失效!!!所以我在A didShow 之后,还原了NavigationController的代理。
Demo: https://github.com/shr191116/TransitionDemo.git
动画是电商App常用的列表跳详情动画,网上动画一大堆,我就不抄了....
网友评论