2012-05-24 20 views
6

को हटा या बंद नहीं किया जा सकता है मेरे पास एक एवीप्लेयर है जिसे जब भी कोई लिंक क्लिक किया जाता है तो मैं एक नए दृश्य पर लोड करता हूं।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 nib में टॉगल है जो दृश्य को हटा देना चाहिए और AVplayer को खेलने से रोकना चाहिए।

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

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

दृश्य सही ढंग से हटा दिया गया है लेकिन खिलाड़ी अभी भी पृष्ठभूमि में खेलता है। थोड़ा परीक्षण करने के बाद खिलाड़ी टॉगल क्वालिटी विधि में किसी भी कोड का जवाब नहीं देगा, लेकिन मेरे पास स्ट्रिंग्स हैं क्योंकि चेक लॉग हो रहे हैं।

मैं क्या गलत कर रहा हूं पर कोई विचार?

+1

प्लेयरLayer.player = nil का उपयोग करें; पर्यवेक्षण से हटाए जाने से पहले –

+0

ध्वनि तब भी खेलती रहती है जब मैं ऐसा करता हूं। – AFraser

+0

क्या होगा यदि आप इसे दूसरे क्रम में करते हैं (हटाएं और फिर शून्य पर सेट करें)? – Squatch

उत्तर

19

मुझे पता है कि यह एक पुराना सवाल है, लेकिन यह किसी दिन किसी के लिए सहायक हो सकता है।

playerLayer के बाद से एक के रूप में sublayer और जोड़ा जा रहा है नहीं एक subview यह बस कुछ की तरह अपने superlayer (superview के बजाय) से निकाले जाने का और खिलाड़ी शून्य करने के लिए सेट किया जाना चाहिए, जरूरत के रूप में:

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

@ लिलाक क्या आपने कभी यह पता लगाया है कि यह कोड कहां रखा जाए? –

संबंधित मुद्दे