全屏YouTube视频后出现不平衡的开始/结束外观转换调用

4
我正在尝试解决这个问题,以下是情况说明:
我有一个非常基本的应用程序,其中包含一个MMDrawerController和一个内部的tableview,当点击项目时,它会链接到uitabbarcontroller。在第一个页面中,嵌入了一个YouTube UIWebView,当按下播放按钮时,会全屏播放YouTube视频。
以下是发生的情况:
1. 按下视频,全屏打开并开始播放 2. UITabBar viewWillDisappear触发 3. 根MMDrawerController viewWillAppear触发 4. 视频结束 5. 用户回到他们开始的UITabBar,一切似乎都很好,即使之前它“消失”了
现在我在两个视图的ViewWillAppears / Disappears中放置了布尔值来检查应用程序的当前状态。通常是0,1,表示表格是打开的还是uitabbarcontroller是打开的。在观看视频后,它们显示为0,0。如果我在导航上按返回键,从任何地方导航时会出现“不平衡的调用开始/结束外观转换”。
现在,如果我监听YouTube视频的开始,然后触发:
[self.navigationController popToRootViewControllerAnimated:NO];
我可以防止不平衡的调用发生,并且用户可以继续浏览应用程序。但是,他们无法观看视频,只能被扔回一个视图。
此外,在3中,我可以检查两个控制器上的0,0,然后重新启动整个应用程序。但这不是一个好的解决方案。
预期结果:
用户可以按uiwebview,观看视频,之后他们会回到他们离开的地方。如果他们在导航控制器上按返回键,则不会出现不平衡的外观转换。
我已经尝试了很多东西,例如
[self.navigationController poptoViewController:...]
从我目前所了解的情况来看,它与全屏视频加载在根控制器有关(因此它的viewWillAppear在3处触发),但之后我没有正确地“放置”回来。一些像
[self.navigationController heyTheUserIsPresentlyIn:self]
在视频消失后可以调用,将是非常好的。
非常感谢任何帮助,虽然我已经花了几个小时在这个问题上,如果我是个白痴,任何文档或书籍中的部分链接都会很有帮助。谢谢。
2个回答

3

听起来像是ViewController的生命周期问题。

您确定要从一个UITableView导航到UITabBarController吗?尝试删除后者,因为它通常是根ViewController,并且基于该假设会调用viewWillDisappearviewWillAppear

如果您需要类似选项卡的控件,但不是根ViewController,也许可以考虑自己编写?


1
当一系列导航动画或动画开始之前没有正确结束时,就会出现这种情况,所以我猜你的动画也是同样的问题,即使不是由导航控制器引起的动画,也要注意你的动画。希望能对你有所帮助。

这个问题完全是由于动画出了问题吗?如果我在应用程序中禁用所有过渡动画,那么能解决这个问题吗? - Andrew Plummer
1
在我的情况下,我以同样的方式解决了这个问题,请尝试一下,然后告诉我结果。如果您在第一个动画结束之前呈现连续的视图控制器动画,请注意导航控制器动画。 - umer sufyan
不,这没起作用。实现了这个延迟解决方案后,也没有任何效果:https://dev59.com/qWoy5IYBdhLWcg3wa9bf需要澄清的是,应用程序在我从UIWebView观看全屏视频之前完美运行,但在那之后就出问题了。 - Andrew Plummer
无论如何,这是一个动画问题,你必须以适当的方式解决它,就像我说的那样,在第一个动画结束后开始下一个动画。 - umer sufyan
我理解你的意思,但是我已经关闭了动画,这并没有解决问题。我知道这个错误也可能是由于同时调用两个视图控制器引起的,考虑到viewWillDisappear在同一个视图控制器上被调用两次,而没有中间的viewWillAppear,这可能是有道理的。然而,这并没有解决根本问题,即全屏视频发生了什么,从那时起改变了应用程序中的一切。 - Andrew Plummer
请将您的动画代码序列放入全屏视频代码中。 - umer sufyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接