我正在尝试用视频显示启动画面。为此我有两个疑问:
我在其上显示的视频仅显示黑屏。我无法猜测我做错了什么。下面是它的代码。
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)
}
}
关于你的第二个问题,你可以在 SplashScreenVC 中使用 AVPlayer。很快就会是这样的:
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()
}
为您提供的一个解决方案是显示启动画面 (IMG),然后播放您喜欢的视频。
要快速播放视频,请使用 AV Foundation https://developer.apple.com/av-foundation/
您无法摆脱静态启动图像。如图所示,操作系统正在加载应用程序并实例化内容,直到准备好调用 UIApplicationDelegate。因此,您所能做的就是要么不使用启动画面(黑屏几秒钟),要么让您的电影完全按照显示的启动画面开始,这样静态图像看起来就会突然动画化。
要在电影加载时摆脱黑屏,您可以尝试使播放器透明,并在播放器后面有一个 UIImageView 来显示启动图像。行为将是这样的:
显示启动画面(静态图像)。应用程序已加载。您会看到 UIImageView,还显示启动屏幕。最上面是透明的电影播放器。电影播放器终于加载了动作并开始播放。至少在理论上,这应该会导致静态图像突然开始动画的效果。
但是,如果您根本不使用启动画面(很多游戏都这样做),那么电影播放器一开始显示黑屏并不重要,您也不会注意到。
关于在 UIImageView 中显示启动屏幕:不幸的是,您必须测试界面旋转并手动加载图像,无法查询显示了哪个启动屏幕。如果您只支持一种界面方向(同样,很多游戏都这样做),那么您当然不会遇到这个问题。
首先确保在“启动屏幕文件”的“常规”选项卡中选择“Main.storyboard”,因为您正在使用 ViewController 作为启动视图。
无法在启动屏幕中播放视频。您所要做的是将视频的第一帧作为启动图像或放入启动屏幕脚本中。编写单独的视图控制器来播放实际视频并从故事板加载。在 Xcode 项目的常规选项卡中将此故事板设置为主界面。