0

在我的应用程序中,我使用 MPMoviePlayerController 在我的第一类 XIB 中运行视频。我的视频持续时间约为 20 秒。我希望当我的视频结束时它自动调用第二类 XIB。这是我的代码。

     -(void)viewWillAppear:(BOOL)animated
       {
         NSString *urlStr = [[NSBundle mainBundle] pathForResource:@"3idiots.mov" ofType:nil];
         NSURL *url = [NSURL fileURLWithPath:urlStr];
         videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
         [self.view addSubview:videoPlayer.view];
         videoPlayer.view.frame = CGRectMake(0, 0,768, 1000);  
         [videoPlayer play];
         [self performSelector:@selector(gotonextview)];

         }
      -(void)gotonextview
        {
         secondview *sec=[[secondview alloc] initWithNibName:@"secondview" bundle:nil];
         [self presentModalViewController:sec animated:YES];
         [sec release];

        }

这段代码给我没有错误,但在视频完成后它不会调用第二类。任何人都可以指导我。提前感谢

4

3 回答 3

3

这在文档中都有解释……iOS版本之间的行为也不同。

不要从 viewWillAppear 调用 gotonextview。而是将您的视图控制器注册为 viewDidLoad 中 MPMoviePlayerPlaybackDidFinishNotification 和 MPMoviePlayerDidExitFullscreenNotification 的观察者,并使用 gotonextview:(NSNotification *)notification 作为选择器。

另外,我建议您从 viewDidAppear 而不是 viewWillAppear 启动电影播放器​​。

编辑:改编的原始海报代码(未经测试)...

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gotonextview:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gotonextview:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
}

-(void)viewDidAppear:(BOOL)animated
{
    NSString *urlStr = [[NSBundle mainBundle] pathForResource:@"3idiots.mov" ofType:nil];
    NSURL *url = [NSURL fileURLWithPath:urlStr];
    videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
    [self.view addSubview:videoPlayer.view];
    videoPlayer.view.frame = CGRectMake(0, 0,768, 1000);  
    [videoPlayer play];
}

-(void)gotonextview:(NSNotification *)notification
{
    NSDictionary *notifDict = notification.userInfo; // Please refer Apple's docs for using information provided in this dictionary

    secondview *sec=[[secondview alloc] initWithNibName:@"secondview" bundle:nil];
    [self presentModalViewController:sec animated:YES];
    [sec release];

}
于 2012-06-01T11:19:24.747 回答
0

更好的方法是使用 Timer 或向视频播放器注册事件侦听器。

示例可以在http://mobiledevelopertips.com/cocoa/basics-of-notifications.html下找到

于 2012-06-01T11:32:38.713 回答
0

一种选择是:

使用带有两个选项卡的 tabBarController。将您的视频放在一个选项卡中,并将您的“第二个视图”放在第二个选项卡中。然后使用

self.tabBarController.selectedIndex=2;
于 2012-06-01T11:13:46.630 回答