执行[moviePlayer.view removeFromSuperview]后iOS应用程序无响应

时间:2013-10-03 16:43:23

标签: iphone ios objective-c ipad

我正在构建一个非常简单的iOS iPad应用程序,它包含一个视图和4个按钮。 所以基本上你在故事板中有:

->ViewController
  ->View (this is added just for alignment and position sake, nothing else)
    ->View
      ->Button1
      ->Button2
      ->Button3
      ->Button4

当您按下按钮时,电影将以全屏模式播放,所有4个按钮都相同。 电影完成后,无论是因为完成还是用户按下“完成”,

[moviePlayer.view removeFromSuperview]用于删除电影,一切都返回到应用的初始状态,带有4个按钮。

这是按下按钮时播放电影的代码

- (void) playMovie:(NSString *)fileName
            ofType:(NSString *)fileType
{

    NSString *filePath=[[NSBundle mainBundle] pathForResource:fileName ofType:fileType];

    NSURL *fileUrl=[NSURL fileURLWithPath:filePath];

    self.moviePlayer=[[MPMoviePlayerController alloc] initWithContentURL:fileUrl];
    [self.view addSubview:self.moviePlayer.view];
    self.moviePlayer.fullscreen = YES;


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

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayBackDidFinish:)
                                                 name:MPMoviePlayerWillExitFullscreenNotification
                                               object:self.moviePlayer];

    [self.moviePlayer prepareToPlay];
    [self.moviePlayer play];

}

这是我用来停止和删除电影的代码:

    - (void) moviePlayBackDidFinish:(NSNotification*)notification
{
    MPMoviePlayerController *player = [notification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:player];

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerWillExitFullscreenNotification
                                                  object:player];

    if ([player respondsToSelector:@selector(setFullscreen:animated:)])
    {
        [player stop];
        [player setFullscreen:NO animated:YES];
        [player.view removeFromSuperview];
    }

}

我遇到的问题是,执行[player.view removeFromSuperview];后,我返回到初始视图,没有背景图像(变黑)并且没有来自任何按钮的响应

如果我删除包含按钮的视图,并将按钮添加到主视图,它将按预期工作。

对不起,如果这不太清楚,我已经阅读了很多书籍,但似乎无法理解这一点。

干杯!

2 个答案:

答案 0 :(得分:0)

看起来你正在从超级视图中移除“播放器”,但是你原来添加的是“电影播放器​​”...尝试从超级视图中删除它。

答案 1 :(得分:0)

我更改了MPMoviePlayerController以获取MPMoviePlayer * 查看 *控制器并引用其中的电影播放器​​,而不使用setFullScreen,一切都按预期开始工作。

因此,在这种情况下,基本上将视图添加到superview和MPMoviePlayerController的setFullScreen = YES是不行的。