2012-05-24 41 views
6

Bağlantı tıklandığında yeni bir görünüme yüklediğim bir AVPlayer var.AVPlayer kaldırılamıyor veya durmuyor

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

Yukarıdaki kod, AVPlayer uygulamasını uygulamamıza ekler ve düzgün çalışır. Görünümü kaldırmalı ve AVplayer'ın oynamasını durduran customControlOverlay ucumda bir geçişim var.

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

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

Görünüm düzgün şekilde kaldırılmıştır ancak müzikçalar hala arka planda oynatılmaktadır. Bir parça test edildikten sonra, toggleQuality yöntemindeki herhangi bir koda yanıt vermeyecek, ancak çekler kayıtlara girdiğinden beri oraya sahibim.

Neyi yanlış yaptığım hakkında bir fikrin var mı?

+1

playerLayer.player = nil; superview –

+0

'dan kaldırmadan önce Ses, bunu yapsam bile oynatmaya devam ediyor. – AFraser

+0

Ya diğer sırada bunu yaparsanız (kaldırın ve nil olarak ayarlayın)? – Squatch

cevap

19

Bunun eski bir soru olduğunu biliyorum, ancak bir gün birilerine yardımcı olabilir. playerLayer yana

bir sublayer olarak ve ilave ediliyor değil sadece bir şey gibi (yerine Superview ait) onun superlayer kaldırılacak ve oyuncu nil ayarlanmalıdır gereken bir subview olarak:

/* 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

pastamı kurtardı. Teşekkürler. – SpaceDog

+0

Özür dilerim, üzgünüm uzun zaman oldu. Ancak, kodu aşağıda nereye koymalıyım? viewDidDisappear: 'veya' viewWillDisappear: '? İkisini de denedim ama hiçbiri işe yaramadı .... bana yardım edebilir misiniz? Şimdiden teşekkürler. – Calios

+0

@Lilac bu kodu nereye koyacağınızı hiç düşündünüz mü? –