2010-03-18 10 views
5

मैं MPMoviePlayerController व्यू (ओएस 2.x और ऊपर) में मानक रिवाइंड/प्ले/फॉरवर्ड कंट्रोल के बाएं और दाएं कस्टम बटन जोड़ने की कोशिश कर रहा हूं। मैंने यह पता लगाया है कि उन्हें प्लेयर विंडो में कैसे जोड़ना है, लेकिन वे हमेशा दिखाई देते हैं। क्या मानक नियंत्रण प्रकट होने और गायब होने का पता लगाने का कोई तरीका है?आईफोन MPMoviePlayer नियंत्रण कब प्रकट/गायब होने पर पता लगाने के लिए कैसे?

उत्तर

10

ठीक है, इसे मिला, इस तरह बनाएं:

BOOL controlsVisible = NO; 
for(id views in [[_moviePlayer view] subviews]){ 
for(id subViews in [views subviews]){ 
    for (id controlView in [subViews subviews]){ 
    controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES); 
    } 
    } 
} 
NSLog(@"player controls are visible: %d", controlsVisible); 

कहाँ _movePlayer खिलाड़ी के अपने उदाहरण है। गहरे लूप में, MPFullScreenVideoOverlay दृश्य उदाहरण अल्फा == 0.0 होगा यदि नियंत्रण छिपा हुआ है, या नियंत्रण दिखाए जाने पर अल्फा 1.0 होगा। आप आवश्यकतानुसार एक पर्यवेक्षक और आग चीजें जोड़ सकते हैं। मुझे पता है कि सुरुचिपूर्ण नहीं है लेकिन यह मेरे लिए काम करता है, क्योंकि ऐप्पल ने इस कार्य के बारे में कुछ भी दस्तावेज नहीं किया है।

चीयर्स ...

+0

आपके दृष्टिकोण की तरह .. !! और – Kamarshad

+0

के लिए +1 यह 3 जी सक्षम होने पर काम नहीं करता है – hariszaman

0

movieControlMode प्रॉपर्टी में देखें। आप MPMovieControlMode

MPMovieControlMode विकल्प मूवी प्लेबैक नियंत्रण प्रदर्शित करने के लिए सेट कर सकते हैं।

typedef enum { 
    MPMovieControlModeDefault, 
    MPMovieControlModeVolumeOnly, 
    MPMovieControlModeHidden 
} 

MPMovieControlMode;

तुम भी MPMoviePlayerScalingModeDidChangeNotification की जांच कर सकते

+1

मुझे पता है कि नियंत्रण को कैसे सक्षम किया जाए, जो मैं देख रहा हूं वह एक अधिसूचना है जब नियंत्रण प्रकट होता है और गायब हो जाता है (उदाहरण के लिए, जब उपयोगकर्ता स्क्रीन को टैप करता है)। –

0

पूर्व iOS3.2
"disapierance" पता लगाने के लिए आसान है:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController]; 

appierance पता लगाने के लिए थोड़ा मुश्किल है (शायद वहाँ बेहतर तरीका है) :

... 
[moviePlayerController play]; 
mainTimer = [NSTimer scheduledTimerWithTimeInterval:1/100 target:self selector:@selector(tick) userInfo:nil repeats:YES]; 

- (void)tick { 
    if([[[UIApplication sharedApplication] windows] count] < 2) return; 

    moviePlayerWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
    if(moviePlayerWindow){ 
    [mainTimer invalidate], mainTimer=nil; 
    // here you have moviePlayerWindow 
    } 
} 
+0

मैं उस प्लेयर नियंत्रण का जिक्र कर रहा हूं जो फिल्म के शीर्ष पर एक एचयूडी में दिखाई देता है। ये चल रहा है, जबकि यह चल रहा है और गायब हो जाएगा (उदाहरण के लिए, जब उपयोगकर्ता मूवी पर टैप करता है)। –

0

cybercow के जवाब सही सिर्फ छोटे संशोधन के जवाब और अधिक सटीक बनाने के लिए जोड़ने के लिए है।

BOOL controlsVisible = NO; 
for(id views in [[self.moviePlayerViewController view] subviews]) 
{ 
    for(id subViews in [views subviews]) 
    { 
     for (id controlView in [subViews subviews]) 
     { 
      if ([controlView isKindOfClass:[UIView class]] && ((UIView*)controlView).tag == 1004) 
      { 
      controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES)    
      } 
     } 

    } 
} 

मैंने सबसे आंतरिक लूप बदल दिया। असल में 1004 MPMoviePlayer नियंत्रणों का टैग है, इसलिए यह अधिक सटीक रूप से काम करेगा।