最近项目开发要实现一个功能,在启动页面播放一段视频,等视频播放完再进入app主界面,于是便各种搜索 爬文,最后决定解决方案,视频播放使用苹果原生自带框架AVFoundation,那就开干吧.
话说苹果帮我们封装了MPMoviePlayerController 和AVFoundation这俩个视频播放框架,这两个框架在使用上相对于ffmpeg这种重型装甲来说,可谓是有天地之别,而且他那api都是一坨一坨的c语言,于是果断放弃之.那AVFoundation呢?苹果高级封装 肯定简单易学啊!对于AVFoundation ,这里不做深究,相信这篇文章能为你解疑答惑,或者有兴趣的同学可以看看我github上面的项目源码,我的视频播放是怎样子自定义的.这里要谈的是我在实现这个启动页面的过程中遇到的坑.
第一个问题.
StoryBoard的根控制器在什么时候被加载的,我们都知道,当我们使用StoryBoard 都要先初始化window的根控制器,方法是:
假如不指定呢,抱歉 这将导致一个恼人的警告:Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?
什么鬼,我的思路是用代码创建一个window并且在上面添加播放器,播放完成在跳到SB的指定控制器.我试着先给SB设置is inital VC,在添加下面的代码:
然而,很可悲的是我这里的代码好像失效了,模拟器现实的界面依然是我指定的SB上面的根控制器.各种资料收集后,发现原来StoryBoard指定了根控制器,在加载完xml文件后,内部代码已经帮我们设置好了AppDelegate的window了.也就是说我们只要这样做就行了:
这样就不会出现警告 又可以在window上添加自定义的window. so good!
那我们赶紧播放视频吧!
好的.我们用自己写的SLLaunchMoviePlayerView这个类来实现视频播放,是的她可以在启动页播放了,很开心 然而:
当时我是这个表情:
第二个问题
我在想 这东西能顺滑一点儿吗?我们都知道AVFoundation视频在播放完成的时候就会黑屏,有没有办法不黑,我用了一个投机取巧的办法 ,当视频播放到最后一侦的时候,暂停视频,把我们自定义的SLAppLaunchPanel移除掉,下面是代码:
运行代码:
总结:有些坑,你跳或者不跳,她都在那里.只不过,不跳,我们就永远没有长进!!
附上github地址:点我,我是小王子!