2010-03-18 4 views
5

Ich versuche, in einer MPMoviePlayerController-Ansicht (OS 2.x und höher) links und rechts neben den Standard-Steuerelementen Zurückspulen/Wiedergeben/Vorspulen benutzerdefinierte Schaltflächen hinzuzufügen. Ich habe herausgefunden, wie man sie zum Player-Fenster hinzufügt, aber sie sind immer sichtbar. Gibt es eine Möglichkeit zu erkennen, wann die Standardsteuerelemente erscheinen und verschwinden?Wie erkennt man, wenn iPhone MPMoviePlayer-Steuerelemente erscheinen/verschwinden?

Antwort

10

Ok, hab es, mach es so:

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); 

Wo _movePlayer Instanz des Spielers ist. In der tiefsten Schleife hat die View-Instanz MPFullScreenVideoOverlay Alpha == 0.0, wenn die Steuerelemente ausgeblendet sind, oder Alpha 1.0, wenn die Steuerelemente angezeigt werden. Sie können einen Beobachter hinzufügen und die Objekte nach Bedarf löschen. Ich weiß, ist nicht elegant, aber es funktioniert für mich, da Apple nichts über diese Aufgabe dokumentiert hat.

Prost ...

+0

wie Ihre Annäherung .. !! und +1 für diese – Kamarshad

+0

es funktioniert nicht, wenn 3G aktiviert ist – hariszaman

0

Sehen Sie sich die movieControlMode-Eigenschaft an. Sie können den MPMovieControlMode

MPMovieControlMode Optionen zum Anzeigen von Steuerelementen für die Filmwiedergabe einstellen.

typedef enum { 
    MPMovieControlModeDefault, 
    MPMovieControlModeVolumeOnly, 
    MPMovieControlModeHidden 
} 

MPMovieControlMode;

Sie auch MPMoviePlayerScalingModeDidChangeNotification überprüfen können

+1

Ich weiß, wie die Steuerelemente zu aktivieren, was ich suche ist eine Benachrichtigung, wenn die Steuerelemente angezeigt und verschwinden (zum Beispiel wenn der Benutzer den Bildschirm antippt). –

0

pre iOS3.2
"disapierance" zu erkennen ist einfach:

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

appierance zu erkennen, etwas härter ist (vielleicht besseren Weg gibt es) :

... 
[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

Ich beziehe mich auf die Player-Steuerelemente, die in einer HUD über dem Film erscheinen. Diese erscheinen und verschwinden während der Bewegung (z. B. wenn der Benutzer auf den Film tippt). –

0

Antwort der cybercow Recht hat, ist nur wenig Änderung fügt die Antwort genauer zu machen.

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)    
      } 
     } 

    } 
} 

Ich habe die innerste Schleife geändert. Eigentlich ist 1004 das Tag der MPMoviePlayer-Steuerelemente, damit es genauer funktioniert.