2012-05-24 27 views
6

Tôi có AVPlayer mà tôi tải lên chế độ xem mới bất cứ khi nào liên kết được nhấp.Không thể xóa hoặc dừng 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]; 
} 

Đoạn mã trên cho biết thêm AVPlayer vào ứng dụng của tôi và hoạt động tốt. Tôi có một chuyển đổi trong nib customControlOverlay của tôi mà nên loại bỏ xem và ngăn chặn các AVplayer từ chơi.

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

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

Chế độ xem được xóa đúng cách nhưng trình phát vẫn phát trong nền. Sau khi thử nghiệm một chút, người chơi sẽ không trả lời bất kỳ mã nào trong phương thức toggleQuality nhưng các chuỗi tôi có ở đó khi các kiểm tra được ghi lại.

Bất kỳ suy nghĩ nào về những gì tôi đang làm sai?

+1

Sử dụng trình phátLayer.player = nil; trước khi bạn xóa khỏi superview –

+0

Âm thanh tiếp tục phát ngay cả khi tôi làm điều đó. – AFraser

+0

Nếu bạn làm điều đó theo thứ tự khác (loại bỏ và sau đó đặt thành nil)? – Squatch

Trả lời

19

Tôi biết đó là câu hỏi cũ, nhưng có thể hữu ích cho ai đó vào một ngày nào đó.

Kể từ khi playerLayer đang được thêm vào như là một sublayer và không phải là một subview nó chỉ đơn giản cần phải được loại bỏ khỏi superlayer của nó (thay vì SuperView) và các cầu thủ nên được đặt thành con số không, một cái gì đó như:

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

đã lưu thịt xông khói của tôi. Cảm ơn. – SpaceDog

+0

Xin lỗi, xin lỗi đã lâu rồi. Nhưng, tôi nên đặt mã dưới đây ở đâu? trong 'viewDidDisappear:' hoặc 'viewWillDisappear:'? Tôi đã thử cả hai, nhưng không ai trong số họ làm việc .... bạn có thể giúp tôi được không? Cảm ơn trước. – Calios

+0

@Lilac bạn đã bao giờ tìm ra nơi để đặt mã này? –

Các vấn đề liên quan