首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPMoviePlayer在[moviePlayer.view removeFromSuperview]和[moviePlayer release]上不会消失

MPMoviePlayer在[moviePlayer.view removeFromSuperview]和[moviePlayer release]上不会消失
EN

Stack Overflow用户
提问于 2011-06-27 02:53:12
回答 2查看 2.4K关注 0票数 1

我的MPMoviePlayerController.When有问题我正在看视频,点击左上角的‘完成’按钮,MoviePlayer没有消失,即使代码看起来是调用的:

代码语言:javascript
复制
   NSURL *url = [NSURL URLWithString:article.enclosureLink];    

    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];  

    // Set movie player layout
    [moviePlayer setControlStyle:MPMovieControlStyleFullscreen];
    [moviePlayer setFullscreen:YES];

    // May help to reduce latency
    [moviePlayer prepareToPlay];

    // Register to receive a notification when the movie has finished playing.      
    [[NSNotificationCenter defaultCenter] addObserver:self  
                                             selector:@selector(moviePlayBackDidFinish:)  
                                                 name:MPMoviePlayerPlaybackDidFinishNotification  
                                               object:moviePlayer];  

    [[NSNotificationCenter defaultCenter] addObserver:self  
                                                 selector:@selector(movieReadyToPlay:)  
                                                     name:MPMoviePlayerLoadStateDidChangeNotification  
                                                   object:moviePlayer];

和选择器:

代码语言:javascript
复制
- (void) movieReadyToPlay:(NSNotification*)notification {
    MPMoviePlayerController *moviePlayer = [notification object];  

    if(moviePlayer.loadState == MPMovieLoadStatePlayable){
        [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerLoadStateDidChangeNotification object:moviePlayer];         
        moviePlayer.controlStyle = MPMovieControlStyleFullscreen;  
        //moviePlayer.shouldAutoplay = YES; 
        [self.view addSubview:moviePlayer.view];  
        [moviePlayer setFullscreen:YES animated:YES];  
        [moviePlayer play];
    }

}

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

    [moviePlayer setFullscreen:NO animated:YES];  
    [moviePlayer.view removeFromSuperview];  
    [moviePlayer release];

    NSLog(@"Finished movie!");
} 

在我看来,这是一个非常简单的代码,但我肯定犯了一个愚蠢的错误。NSLog显示函数已被调用,但是播放器停留在它所在的位置,并且没有办法摆脱它。

而且,在所谓的释放之后,播放器仍然可以操作的事实似乎表明有一些根本的问题,我就是看不出是什么。

有没有人有建议?

更新:奇怪的是,在iPhone模拟器中它工作得很好!

Update2:我试着创建了一个特定的UIviewcontroller,尽管它不是我想要的方式,因为动画效果不好。但我学到的是我也有同样的问题。这看起来和解雇球员有关,但它又开始了。

当我将self.moviePlayer设置为setFullscreen:YES动画:YES;在viewDidApear中,并单击播放器中的“完成”按钮时,当我点击完成按钮时,视频将重新开始(再次调用viewDidAppear )。所以在我看来,有什么东西被触发了,让视频重新开始。

如果我把它放在viewDidLoad上,那么系统就可以工作了,但是图形是混合和混乱的……

任何帮助都是真的,真的很感激,因为我现在花了两天的时间来做这件事,而不是弄得头晕目眩!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-28 23:11:14

添加

代码语言:javascript
复制
[moviePlayer stop]  

在此之前

代码语言:javascript
复制
 [moviePlayer.view removeFromSuperview]

也许行得通。

更新:如果这不起作用,那么在删除controlstyle导致此类问题的subview.Most之前,尝试将controlStyle设置为MPMovieControlStyleNone。

票数 1
EN

Stack Overflow用户

发布于 2013-04-18 20:37:17

对于我来说,我尝试了所有这些:[moviePlayer stop]; [moviePlayer setContentURL:nil]; [moviePlayer.view removeFromSuperview]; moviePlayer = nil;

结果什么都没用。我想这是因为我的MPMoviePlayerController进入了全屏。解决方法?

代码语言:javascript
复制
        [moviePlayer setFullscreen:NO animated:YES];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6486018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档