2010-09-06 13 views

Antwort

5

Sie könnten die Steuerelemente für die Wiedergabe ausblenden und Ihre eigenen diejenigen hinzufügen, wird dies die Standard-Tasten verhindern bei allen

Ie gerendert wird auf Ihre Bedürfnisse mit

[player setMovieControlMode:MPMovieControlModeNone]; 
7

Je, können Sie auch einfach deaktivieren Alle Benutzerinteraktionen in der Playeransicht.

player.view.userInteractionEnabled = NO; 
2

Wired tut dies. Für die Videos, die im Vollbildmodus gestartet werden, verfügen sie über die standardmäßigen MPMoviePlayerController-Steuerelemente, es fehlen jedoch die Vollbildschaltflächen. Und sie verwenden die Standard-eingebauten, da sie plötzlich einen AirPlay-Button mit 4.2 bekommen.

4

Es gibt einen Cheat:

MPMoviePlayerController *mpc = (...some instance...) 
UIView *fsbutton = [[mpc view] viewWithTag:512]; 
[fsbutton setHidden:YES]; 

Der Haupt Haken ist, Sie haben es in viewDidAppear: oder ähnliches zu tun, weil die Movieplayer Ansicht selbst irgendwo aufstellt innen didMoveToWindow oder didMoveToSuperview, die nach viewWillAppear: passieren. So erhalten Sie einen kurzen Blick auf die Vollbild-Taste. Andere offensichtliche Fänge schließen ein: brüchig vs. Apple, das diesen 512 Markierungswert ändert (obwohl es in 3.2 - 4.2 funktioniert); und natürlich würde Apple es lieber nicht tun.

Die empfohlene Lösung besteht darin, den Steuerungsstil auf MPMovieControlStyleNone einzustellen und eigene Transportsteuerelemente zu rollen, was mehr Arbeit bedeutet.

+1

Das andere Problem ist, dass die Prise zu zoomen Geste, die auch den Benutzer in den Vollbild bringt umgeht diese nette Idee. – Roger

+0

und versuchen Sie, Gesten zu entfernen – SAKrisT

+1

Apple lehnt Ihre App wahrscheinlich ab, wenn Sie versuchen, den MPMovePlayerController über die öffentliche API hinaus zu ändern. Hier ein Zitat aus [Apples Dokumentation] (https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/Reference/Reference.html): "Betrachten Sie eine Movie-Player-Ansicht als undurchsichtig Sie können Ihre eigenen benutzerdefinierten Unteransichten zum Ebeneninhalt über dem Film hinzufügen, aber Sie dürfen keine der vorhandenen Unteransichten ändern. ** " – n8tr

11

tat einfach es:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(movieEventFullscreenHandler:) 
               name:MPMoviePlayerWillEnterFullscreenNotification 
               object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(movieEventFullscreenHandler:) 
               name:MPMoviePlayerDidEnterFullscreenNotification 
               object:nil]; 

    self.moviePlayer.controlStyle = MPMovieControlStyleEmbedded; 
} 

- (void)movieEventFullscreenHandler:(NSNotification*)notification { 
    [self.moviePlayer setFullscreen:NO animated:NO]; 
    [self.moviePlayer setControlStyle:MPMovieControlStyleEmbedded]; 
} 
+4

Nette Idee, ich dachte, ich könnte damit eine Warnung auslösen, um zu erklären, warum Vollbild war im aktuellen Kontext nicht zulässig und zwang es, im eingebetteten Modus zu bleiben. Unglücklicherweise passiert es, dass Sie immer noch den Übergang zum Vollbildmodus erhalten und dann wird es wieder embedded, was wirklich schrecklich aussieht. – Roger

+0

Ich habe gerade versucht, dies zu tun, aber leider Vollbild ignoriert die MPMovieControlStyleEmbedded und verwendet FullScreen, die, wenn ich Fullscreen dann schaltet, geht es noch größer :( – lordB8r

2

Vollbild-Taste zusammen mit Pausetaste entfernt werden kann.

[self.videoPlayer setControlStyle:MPMovieControlStyleNone]; 
3

um Schalter auf Vollbild-Modus zu deaktivieren, entweder Form Taste oder Pinch-Geste, können Sie diese verwenden:

moviePlayer.controlStyle = MPMovieControlStyleNone; 
moviePlayer.view.userInteractionEnabled =NO; 
0

Ich weiß, es ist ein wenig veraltet, aber trotzdem. Ich habe in dieser Richtung geforscht und sehe aus wie eine Antwort gefunden. Ich weiß nicht, warum es funktioniert, aber es ist so.

-(void) playMovieAtURL: (NSURL*) theURL { 

    MPMoviePlayerController* theMovie = 
    [[MPMoviePlayerController alloc] initWithContentURL: theURL]; 
    //That line is for ARC. Without it, it may not work. 
    self.moviePlayer = theMovie; 
    theMovie.scalingMode = MPMovieScalingModeAspectFill; 
    theMovie.controlStyle = MPMovieControlStyleFullscreen; 
    theMovie.repeatMode = MPMovieRepeatModeOne; 
    //Here you'd better use your custom ViewController subclass, if you want autorotating and all that stuff. 
    UIViewController * vc = [UIViewController new]; 
    [vc.view addSubview:theMovie.view]; 
    theMovie.fullscreen = YES; 
    theMovie.view.frame = vc.view.bounds; 
    vc.view = theMovie.view; 
    [self presentModalViewController:vc animated:YES]; 
    theMovie.fullscreen = YES; 

    [theMovie prepareToPlay]; 
    [theMovie play]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 
} 

// Wenn der Film fertig ist, lassen Sie den Controller los.

-(void) myMovieFinishedCallback: (NSNotification*) aNotification 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    MPMoviePlayerController* theMovie = [aNotification object]; 
    [[NSNotificationCenter defaultCenter] 
removeObserver: self 
name: MPMoviePlayerPlaybackDidFinishNotification 
object: theMovie]; 
    [self.moviePlayer.view removeFromSuperview]; 
    self.moviePlayer = nil; 
    // Release the movie instance created in playMovieAtURL: 
} 
1

Wenn das nur, was Sie tun wollen, ist disable Prise vollen Umfang nutzen zu gehen (dhalte Interaktion aktiviert und was auch immer Kontrolle Stil, den Sie mögen), können Sie diese verwenden:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    NSSet *set = [event allTouches]; 
    NSArray *arr = [set allObjects]; 
    for (int i = 0; i < arr.count; i++) { 
     UITouch *touch = (UITouch *) [arr objectAtIndex:i]; 

     NSArray *recognisers = touch.gestureRecognizers; 
     for (UIGestureRecognizer *recogniser in recognisers) { 
      if (recogniser.enabled && [recogniser isMemberOfClass:[UIPinchGestureRecognizer class]]) { 
       recogniser.enabled = NO; 
      } 
     } 
    } 
} 
2

Einfachen Block Prise Zoom hier

zu entfernen hoffen, dass es

helfen, es mit mir auf iOS6 arbeiten

for (UIView *view in moviePlayer.view.subviews) { 

    for(UIPinchGestureRecognizer *pinch in view.gestureRecognizers){ 
    if([pinch isKindOfClass:[UIPinchGestureRecognizer class]]) 
     [view removeGestureRecognizer:pinch]; 
    } 
} 
6

Sie können controlStyle auf Vollbild setzen. Diese Steuerelemente sind etwas anders, aber es gibt keine Fullscreen-Schaltfläche!

[_moviePlayerController setControlStyle:MPMovieControlStyleFullscreen]; 
+0

Genius! Dies sollte definitiv die beste Antwort. – PICyourBrain

2

Dies funktionierte auf iOS 7, iPhone 5s.

Beachten Sie, dass ich nur auf "DID" und nicht auf die "WILL" -Benachrichtigung zu hören sowie animiert. Ich denke, das funktioniert, weil es dem System Zeit gibt zu reagieren. Wenn ich die "WILL" und "DID" wie in den Antworten oben erwähnt verwendet habe, führte dies zu einem schwarzen Bildschirm ohne Kontrollen. Es gibt einen leichten Glitch, der sichtbar ist, wenn der Übergang auftritt, aber ich brauche die Play/Scrub-Buttons von Embedded.

5

Leider keine oben für mich gearbeitet richtig, so die oben Kommissionierung ich implementiert die folgenden (und hat gut funktioniert):

  1. Ausblenden der Vollbild-Taste.

diesen Code in der Methode hinzufügen, wo Sie den Video-Player initialisieren.

 

    .... 

     //Because we have to wait until controllers are shown 

     [self performSelector:@selector(hideFullscreenButton) withObject:self afterDelay:0.5]; 

    ... 

die Methoden hinzufügen:

 

    -(void) hideFullscreenButton{ 

     //Hide full screen mode button 

     [self hideFullscreenSubview:movieClip.view.subviews]; 

    } 



    -(void) hideFullscreenSubview:(NSArray*)arr{ 

     for(UIView *v in arr){ 

      if([v.subviews count]>0) 

       [self hideFullscreenSubview:v.subviews]; 

      else 

       NSLog(@"%@",v); 

      if(v.frame.origin.x==975){ 

       v.hidden=TRUE; 

      } 

     } 

    } 

Das Problem beruht, dass es keinen Tag, das Sie verstecken müssen sehen zu identifizieren ist. In meinem Fall finde ich es durch die Ansichtskoordinaten heraus.

  1. Überschreiben Sie die Tippgesten, wenn kein Vollbildzoom möglich ist.
 

movieClip.controlStyle = MPMovieControlStyleEmbedded;  

    //Disable tap for not allowing that video control set on a full screen mode. 
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(doSingleTap)]; 
    singleTap.numberOfTapsRequired = 1; 
    [movieClip.view addGestureRecognizer:singleTap]; 



    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(doDoubleTap)]; 
    doubleTap.numberOfTapsRequired = 2; 
    [movieClip.view addGestureRecognizer:doubleTap]; 
    [singleTap requireGestureRecognizerToFail:doubleTap]; 

, und die Auswahlmethoden hinzufügen:

 

    -(void) doSingleTap{ 
     //DO NOTHING!!! 
    } 

    -(void) doDoubleTap{ 
     //DO NOTHING!!! 
    } 

+0

Die erste Lösung arbeitete perfekt für mich, thx! Auf der Unterseite der Swift-Version – diegomen

+0

versteckt es den Wäscher nicht die Vollbild-Taste –

0

ein Put UIView oder UIButton mit transparentem Hintergrund auf der Ansicht, dass das Video zeigt, so dass der Benutzer nicht in der Lage sein wird, Tippe auf die Ansicht, die das Video enthält.

1

Dies ist die Swift-Version der ersten Lösung von Javier Calatrava Llaveria:

func hideFullScreenButton() { 
    self.hideFullScreenSubview((self.moviePlayerController?.view.subviews)!) 
} 

func hideFullScreenSubview(subviews: [UIView]) { 
    for view: UIView in subviews { 
     if view.subviews.count > 0 { 
      self.hideFullScreenSubview(view.subviews) 
     } 
     if view.frame.origin.x == 631 { 
      view.hidden = true 
     } 
    } 
} 

Und wenn der Benutzer tippt auf Play:

self.performSelector(#selector(VideoViewController.hideFullScreenButton), withObject: self, afterDelay: 0.5) 

(VideoViewController ist die View-Controller, in dem ich habe der MPMoviePlayerController)

Verwandte Themen