我正在尝试使用视频显示启动画面。为此,我有两个问题:
我正在播放的视频只显示黑屏。我猜不出我做错了什么。下面是它的代码。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let vc = SplashScreenVC(nibName: "SplashScreenVC", bundle: nil)
let rootViewController = UINavigationController(rootViewController: vc)
self.window?.rootViewController = rootViewController
self.navigationController?.navigationBarHidden = true
self.window?.makeKeyAndVisible()
// Override point for customization after application launch.
return true
}
class SplashScreenVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBarHidden = true
playVideo()
}
func playVideo() {
let moviePath = NSBundle.mainBundle().pathForResource("animationVideo", ofType: "mp4")
let movieUrl = NSURL.fileURLWithPath(moviePath!)
let moviePlayer : MPMoviePlayerController = MPMoviePlayerController(contentURL: movieUrl)
moviePlayer.prepareToPlay()
let vV = self.view.viewWithTag(SplashScreenUITags.videoView.rawValue)! as UIView
moviePlayer.controlStyle = MPMovieControlStyle.None
moviePlayer.scalingMode = MPMovieScalingMode.Fill
moviePlayer.movieSourceType = MPMovieSourceType.File;
moviePlayer.view.frame = vV.bounds
vV.addSubview(moviePlayer.view)
moviePlayer.play()
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("moviePlayBackDidFinish:"), name: MPMoviePlayerPlaybackDidFinishNotification, object: moviePlayer)
}
}
答案 0 :(得分:1)
一个解决方案是显示Splash(IMG),而不是播放您喜欢的视频。
要快速播放视频,请使用AV Foundation https://developer.apple.com/av-foundation/
你无法摆脱静态飞溅图像。虽然它显示,所以 操作系统正在加载应用程序并实例化其中的内容 准备打电话给你的UIApplicationDelegate。所以你所能做的就是 不使用闪光灯(黑屏几秒钟)或制作电影 从显示的启动画面开始,所以看起来像静态 图像会突然变得有活力。
要在电影加载时摆脱黑屏,您可以尝试 使播放器透明,并在播放器后面有一个UIImageView 这显示了飞溅图像。行为就是这样:
显示启动画面(静态图像)。应用程序已加载。你看 UIImageView,也显示启动画面。最重要的是 透明电影播放器。电影播放器终于加载了这一举动 开始玩它。至少在理论上,这应该会产生这种效果 静态图像突然开始制作动画。
但如果你根本不使用闪屏(许多游戏都这样做), 然后电影播放器显示黑屏并不重要 起初,你不会注意到。
关于在UIImageView中显示启动画面:不幸的是, 你必须测试界面旋转并手动加载图像, 无法查询显示的启动画面。如果你只是 支持一个界面方向(再次,很多游戏都这样做)你 当然没有这个问题。
答案 1 :(得分:1)
关于第二个问题,您可以在SplashScreenVC中使用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()
}
答案 2 :(得分:0)
首先确保选中启动屏幕文件Main.storyboard中的常规选项卡,因为您使用ViewController作为启动视图。
答案 3 :(得分:0)
无法在启动画面中播放视频。您需要做的是将视频的第一帧作为启动图像或放入启动屏幕stoyboard。编写单独的视图控制器,播放您的实际视频并从故事板加载。将此故事板设置为Xcode项目常规选项卡中的主界面。