2012-05-24 84 views
6

我有一個AVPlayer,我加載到一個新的視圖,每當一個鏈接被點擊。無法刪除或停止AVPlayer

-(void)createAndConfigurePlayerWithURL:(NSURL *)movieURL sourceType:(MPMovieSourceType)sourceType { 
self.playerItem = [AVPlayerItem playerItemWithURL:movieURL]; 
customControlOverlay = [[AFDetailViewController alloc] initWithNibName:@"AFMovieScrubControl" bundle:nil]; 
backgroundWindow = [[UIApplication sharedApplication] keyWindow]; 
[customControlOverlay.view setFrame:backgroundWindow.frame]; 
[backgroundWindow addSubview:customControlOverlay.view]; 

playerLayer = [AVPlayerLayer playerLayerWithPlayer:[AVPlayer playerWithPlayerItem:playerItem]]; 
[playerLayer.player play]; 
playerLayer.frame = customControlOverlay.view.frame; 
[customControlOverlay.view.layer addSublayer:playerLayer]; 
} 

上面的代碼將AVPlayer添加到我的應用程序,並正常工作。我在我的customControlOverlay筆尖中有一個切換,它應該刪除視圖並停止播放AVplayer。

-(IBAction)toggleQuality:(id)sender { 
if (qualityToggle.selectedSegmentIndex == 0) { 
    NSLog(@"HD"); 
    [playerLayer.player pause]; 
    [self.view removeFromSuperview]; 

} else if (qualityToggle.selectedSegmentIndex == 1) { 
    NSLog(@"SD"); 
} 
} 

該視圖被正確刪除,但播放器仍在後臺播放。經過測試後,玩家不會響應toggleQuality方法中的任何代碼,但我在那裏獲得字符串,因爲支票正在記錄。

有關我在做什麼錯的任何想法?

+1

使用playerLayer.player = nil;在從超級視圖中移除之前 –

+0

即使我這樣做,聲音仍在播放。 – AFraser

+0

如果你以其他順序做(如果你刪除然後設置爲零)會怎麼樣? – Squatch

回答

19

我知道這是一個古老的問題,但它可能有助於某人某一天。

由於playerLayer被添加爲sublayer而不是它只是需要從它的superlayer(而不是上海華)移除,玩家應設置爲零,像一個subview

/* not sure if the pause/remove order would matter */ 
[playerLayer.player pause]; 
// uncomment if the player not needed anymore 
// playerLayer.player = nil; 
[playerLayer removeFromSuperlayer]; 
+1

救了我的培根。謝謝。 – SpaceDog

+0

對不起,對不起,這已經很久了。但是,我應該在哪裏放置代碼?在'viewDidDisappear:'或'viewWillDisappear:'?我嘗試了兩種,但都沒有工作....你能幫我嗎?提前致謝。 – Calios

+0

@Lilac你有沒有想過把代碼放在哪裏? –