我正在尝试制作一个短的.mp4视频作为启动应用程序时的启动屏幕。
有这样的例子吗?
请参阅下面DarkDust在iOS应用程序中模拟飞溅视频的答案。
我认为一个解决方案是显示一个飞溅(IMG),然后播放你喜欢的视频。
要在swift中播放视频,请使用AV Foundationhttps://developer.apple.com/av-foundation/
您无法摆脱静态飞溅图像。在显示的同时操作系统正在加载应用程序并实例化内容,直到它准备呼叫您的UIApplicationDelegate。所以你所能做的就是不使用飞溅(黑屏几秒钟)或制作电影从显示的启动屏幕开始,使其看起来像静态图像会突然产生动画。
要在加载电影时摆脱黑屏,您可以尝试使播放器透明,并在播放器后面设置UIImageView显示了飞溅图像。行为是这样的:
显示启动屏幕(静态图像)。应用程序已加载。你看UIImageView,也显示了启动屏幕。最重要的是透明电影播放器。电影播放器终于加载了移动和开始播放。至少在理论上,这应该会产生效果静态图像突然开始动画化。
但如果你根本不使用闪屏(很多游戏都是这样做的),那么电影播放器显示黑屏也没关系一开始,你不会注意到。
关于在UIImageView中显示启动屏幕:不幸的是,你必须测试界面旋转并手动加载图像,无法查询显示了哪个启动屏幕。如果你支持一个界面方向(同样,很多游戏都是这样做的)当然没有这个问题。
您可以为"主界面"创建一个自定义ViewController,并在LaunchScreen之后使用它,其中使用AVPlayer。在swift中会有这样的东西:
var player: AVPlayer?
override func viewDidLoad() {
super.viewDidLoad()
loadVideo()
}
private func loadVideo() {
//this line is important to prevent background music stop
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
} catch { }
let path = NSBundle.mainBundle().pathForResource("your path", ofType:"mp4")
player = AVPlayer(URL: NSURL(fileURLWithPath: path!))
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.frame
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
playerLayer.zPosition = -1
self.view.layer.addSublayer(playerLayer)
player?.seekToTime(kCMTimeZero)
player?.play()
}