iOS 自定义presentViewController 动画时 出现的问题

来源:互联网 发布:若风淘宝店服装店网址 编辑:程序博客网 时间:2024/04/28 06:33

项目中用到了抽屉视图,抽屉视图 推出新视图控制器的时候需要使用presentingViewController,新推出来的视图相对独立,有自己的一套内容,现在问题来了,再 这个新视图上 再 presentingViewController 的时候就会出现问题。因为返回的时候 直接返回到了底层控制器,而且不完全是底层控制器。就像A-->B--C,我们在 C上面 dismiss 的时候, 直接 dismiss 到了 A,而且  b 不是 被dismiss  掉的 ,而是 直接remove 掉了,由于我用的是  抽屉视图,这样一来,从 C返回 的时候 直接界面无法交互了。因为 我的B的view 被remove掉,而这不是我正常的移除方式。

经过查阅苹果官方文档,我了解到,跟push 方式不一样的是,present 推出视图控制器的方式其实是把推出的视图放进了同一个栈,当栈中某个视图控制器执行dismiss的时候,栈中所有在它之上的视图控制器都会被dismiss,不同的是,栈顶的视图控制器将会以动画方式被dismiss,而中间的视图控制器只是简单的remove掉。

我以为发现这个问题就够了,但是没想到后面的问题远远复杂的多,我后来发现无论是用Storyboard 创建的  presentViewController 还是纯代码创建的,都没有出现我上一段说的那种情况。也就是说我直接找错了方向。

我这个问题可以说是二级presentViewController的时候出现的问题,然后我就把源头指向了自定义的动画类。这个类看似简单。其实涉及到的东西很多,为了证明是这个 自定义动画类出现的问题,我 首先把 使用自定义专场动画的那两句代码给注释了。使用系统默认的效果运行,果真就没有了问题,然后我开始研究那个自定义的动画类,这个类官方文档上说,必须使用一个容器View来执行动画,这个容器view 已经有,但是又多了一些其他的东西。我索性把 那些没必要的辅助性的view一并删除,然后运行,果真二级 present 就没有问题了,但是我使用 的 presentMoviePlayerViewControllerAnimated 这个方法使用了 系统的播放器VC,而这个vc在播放完毕的时候会自动dismiss,不知道是什么原因,这个播放器vc在dismiss 的时候总是会执行我那个自定义的dismiss 动画,但是出现的时候却不执行present动画,让我好生郁闷。为了解决这个问题,我判断了一下 dismissedvc  是否是 MoviePlayerViewController  类,如果是就返回dismiss 风格动画为nil,这样就解决了这个问题。目前先说这么多,以后再出现类似的问题,就知道从何下手了。

0 0
原创粉丝点击