iphone - 在 iOS 应用程序中模拟启动视频

标签 iphone ipad mpmovieplayercontroller splash-screen

好吧,在 iOS 中模拟启动视频的选项很少。我们所能做的就是等待应用程序完全加载,然后创建媒体播放器并在其中加载视频。

我用以下代码实现了它:

-(void) moviePlayBackDidFinish:(NSNotification*)notification
{
    NSLog(@"Intro video stopped");
    [mMoviePlayer release];
}

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    NSURL* mMovieURL;
    NSBundle *bundle = [NSBundle mainBundle];
    if(bundle != nil)
    {
        NSString *moviePath = [bundle pathForResource:@"intro" ofType:@"mp4"];
        if (moviePath)
        {
            mMovieURL = [NSURL fileURLWithPath:moviePath];
            [mMovieURL retain];
        }
    }

    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mMovieURL];
    [mMovieURL release];

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePlayBackDidFinish:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:mMoviePlayer];

    mMoviePlayer.controlStyle = MPMovieControlStyleNone;
    [mMoviePlayer.backgroundView addSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Splash/background.png"]] autorelease]];
    mMoviePlayer.scalingMode = MPMovieScalingModeFill;

    [window addSubview:mMoviePlayer.view];
    [mMoviePlayer setFullscreen:YES animated:NO];

    [window makeKeyAndVisible];
    [mMoviePlayer play];

<... other stuff ...>

}

我的视频只有 1 MB。但这段代码做了一些与我想看到的不同的事情:

  1. 首先,用户可以看到静态启动屏幕几秒钟;
  2. 然后黑屏出现 1 或 2 秒。我认为发生这种情况是因为媒体播放器已加载。
  3. 视频开始播放。
  4. 主界面加载。

如你所知,我不喜欢黑屏暂停 - 它看起来很难看。

据我在控制台日志中看到的问题是媒体播放器正在等待主视图 Controller 完全加载。

关于主视图的几句话:我正在为 iPad 编写一个应用程序,主视图由多个带有多个图像的 subview 组成。主视图中的每个图像和每个 subview 都会通过 ASIHTTPRequest 库从 Internet Web 服务加载一些数据。

我认为媒体播放器正在等待所有初始连接完成,然后才开始播放视频...

如何在加载主视图之前强制播放视频?或者也许我可以延迟主 XIB 的加载?

最佳答案

您无法摆脱静态启动图像。如图所示,操作系统正在加载应用程序并实例化内容,直到准备好调用 UIApplicationDelegate。因此,您所能做的就是要么不使用启动画面(黑屏几秒钟),要么让您的电影完全以显示的启动画面开始,这样静态图像看起来就会突然动画化。

要在电影加载时摆脱黑屏,您可以尝试 make the player transparent 并在播放器后面有一个 UIImageView 来显示启动图像。行为将是这样的:

  • 显示启动屏幕(静态图像)。
  • 应用程序已加载。您会看到 UIImageView,也显示启动屏幕。最上面是透明的电影播放器​​。
  • 电影播放器​​终于加载了该 Action 并开始播放。

至少在理论上,这应该会导致静态图像突然开始动画的效果。

但是,如果您根本不使用启动屏幕(很多游戏都这样做),那么电影播放器​​一开始显示黑屏并不重要,您也不会注意到。

关于在 UIImageView 中显示启动屏幕:不幸的是, you have to test the interface rotation and load the image manually ,无法查询显示了哪个启动屏幕。如果您只支持一种界面方向(同样,很多游戏都这样做),那么您当然不会遇到这个问题。

关于iphone - 在 iOS 应用程序中模拟启动视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7051208/

相关文章:

iphone - 如何在模拟器中运行Apple Storekit?

iphone - 如何在 ipad 编码中将 splitview 添加到我的基于 View 的应用程序

iphone - 在 iPad 设备上测试时如何访问内存泄漏工具?

ios - 哪些 iOS 设备是多核的?

ios - 防止 MPMoviePlayerController 控件在视频开始时显示

iphone - 一个可以通过编程方式和在 IB 中实例化的 View Controller ?

iphone - UIGraphicsPopContext() 的问题...?

javascript - 在 iPad 上调试网站的有效策略

ios - MPMoviePlayerController setFullScreen 不工作 ios6

iphone - 当 UIWebView 中视频开始或停止时获取通知