1

我有一個MPMoviePlayerController的問題。當我正在觀看視頻,並點擊左上角的「完成」按鈕時,MoviePlayer不會消失,即使代碼好像是叫:MPMoviePlayer不會在[moviePlayer.view removeFromSuperview]和[moviePlayer release]上消失

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]; 

而且選擇:

- (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:] 我試過並創建了一個特定的UIview控制器,即使它不是我想要做的動畫不太好的方式。但是我學到的是我有同樣的問題。這似乎需要解僱球員來做些事情,但它會再次開始。

當我把[self.movi​​ePlayer setFullscreen:YES animated:YES];在viewDidApear中,點擊播放器中的「完成」按鈕,當我點擊完成按鈕(viewDidAppear被再次調用)時,播放器重新開始視頻。所以觸發了一些事情,所以在我看來,讓視頻重新開始。

如果我把它放在viewDidLoad中,那麼系統的工作原理,但顯卡混合和困惑......

任何幫助是非常,非常讚賞,因爲我花兩天時間在這現在未做的頭部或尾部它!

+0

您是否找到解決方案?我遇到了與iOS 5.0相同的問題 – Daniel

+0

我轉移到了MPMoviePlayerViewController,這是一個伎倆,而不是創建我自己的 –

回答

1

[moviePlayer.view removeFromSuperview] 

可以工作之前添加

[moviePlayer stop] 

更新: 如果不工作,然後嘗試刪除的controlStyle導致這樣的問題的時候subview.Most前設置controlstyle到MPMovieControlStyleNone。

+0

謝謝,我試過了,它不起作用。也許這是一個錯誤,但現在我使用MPMoviePlayerViewController,儘管不是我想要的,但似乎工作。 –

+0

@Luuk:好的。實際上MPMovieplayerController中有很多錯誤,我們必須解決它。蘋果似乎在更高版本的iOS中進行錯誤解決,但在以前的版本中不起作用。 – Yogi

+0

只需要注意,在iOS 6中調用stop的這種方法,然後從superview中刪除播放器的視圖,甚至以前將控制樣式設置爲none,仍然不起作用=/ – Will

2

對於我來說,我嘗試了所有的這些: [moviePlayer stop]; [moviePlayer setContentURL:nil]; [moviePlayer.view removeFromSuperview]; moviePlayer = nil;

並沒有什麼工作。我想通過我的MPMoviePlayerController進入全屏幕,它已經到期了。修復?

 [moviePlayer setFullscreen:NO animated:YES]; 
+0

這對我有用! –