0

我有一个简单的视图,它在用户按下按钮时使用 presentMoviePlayerViewControllerAnimated: 方法创建一个 MPMoviePlayerViewController。新的视图控制器滑入并显示电影播放器​​,到目前为止一切都很好。

然而,当按下按钮时,当前视图控制器滑出底部,显示一个丑陋的(可能是默认的)白色视图,在半秒到几秒之间停留,直到显示电影视图控制器。似乎它取决于我的网络连接,好像电影视图控制器在显示播放器之前正在下载电影的部分内容。

我做错了什么,或者我该如何解决这个问题?我真的更喜欢直接显示电影视图控制器,甚至可能没有滑出持有播放按钮的前一个视图控制器,但仍然像模态视图控制器一样动画。

谢谢!

克里斯托夫

4

4 回答 4

0

我在我的应用程序中注意到同样的问题。有人有建议避免这个问题吗?

就我而言,我将 MPMoviePlayerViewController 作为模式弹出窗口推送到 UI。

// build the movie player
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
MPMoviePlayerViewController *movieViewController = [[[MPMoviePlayerViewController alloc] initWithContentURL:request.URL] autorelease];
[movieViewController.moviePlayer prepareToPlay];
movieViewController.view.backgroundColor = [UIColor blackColor];

// show the movie player view
[self.parentViewController presentModalViewController:movieViewController animated:YES];
于 2011-02-02T23:25:49.707 回答
0

这就是我为 iOS > 3.2 所做的:

- (void) play {
    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mMovieURL];

    if ([mMoviePlayer respondsToSelector:@selector(loadState)]) 
    {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePreloadDidFinishIOS32:) 
                                                     name:MPMoviePlayerContentPreloadDidFinishNotification 
                                                   object:nil];


        [mMoviePlayer prepareToPlay];
        [mMoviePlayer play];
        mMoviePlayer.controlStyle = MPMovieControlStyleEmbedded;
        [mMoviePlayer setMovieControlMode:MPMovieControlModeDefault];
        [mMoviePlayer setBackgroundColor:[UIColor clearColor]];
    }
}

- (void) moviePreloadDidFinishIOS32:(NSNotification*)notification;
{
    // Remove observer
    [[NSNotificationCenter  defaultCenter] 
     removeObserver:self
     name:MPMoviePlayerContentPreloadDidFinishNotification
     object:nil];

    self.view = mMoviePlayer.view;
}

因此,在 viewdidload 中,您可以实例化您想要的内容(例如 UIActivityIndi​​catorView)。只有在预加载完成时才会替换视图控制器。

于 2010-11-18T18:15:31.323 回答
0

解决方案是在创建父视图时初始化播放器视图控制器,然后prepareToPlay在其moviePlayer内部调用。这消除了按下播放按钮时的延迟,并且(我猜)将其移动到用户到达他可以从中播放电影的父视图时。

编辑:这消除了延迟,但由于某种原因,初始化电影视图控制器也会在加载时自动播放它,所以这不是一个好的解决方案。

于 2010-10-30T21:39:45.867 回答
0

我最终只是将视图的背景设置为黑色。不解决延迟,但使它看起来更好:

  theMovieVC.view.backgroundColor = [UIColor blackColor];
于 2010-11-13T22:25:00.963 回答