2010-09-06 8 views

Répondre

5

Vous pouvez cacher les commandes de lecture et d'ajouter vos propres ceux personnalisés, cela empêchera les boutons par défaut étant rendus à tous

Ie avec

[player setMovieControlMode:MPMovieControlModeNone]; 
7

En fonction de vos besoins, vous pouvez aussi tout simplement désactiver toutes les interactions de l'utilisateur sur la vue du lecteur.

player.view.userInteractionEnabled = NO; 
2

Filaire fait cela. Pour les vidéos qui commencent en plein écran, elles ont les contrôles MPMoviePlayerController standard, mais les boutons plein écran ne sont pas disponibles. Et ils utilisent les standards intégrés, puisqu'ils ont soudainement un bouton AirPlay avec 4.2.

4

Il y a un tricheur:

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

Le hic principal est, vous devez le faire dans viewDidAppear: ou similaire, car la vue MoviePlayer se fixe quelque part à l'intérieur didMoveToWindow ou didMoveToSuperview, qui arrive après viewWillAppear:. Donc, vous obtenez un bref éclair du bouton plein écran. D'autres captures évidentes incluent: cassant contre Apple changeant cette valeur d'étiquette 512 (bien que cela fonctionne dans 3.2 - 4.2); et bien sûr, Apple préférerait ne pas le faire.

La solution approuvée est de définir le style de contrôle à MPMovieControlStyleNone et de lancer vos propres contrôles de transport, ce qui représente plus de travail.

+1

L'autre problème est que le pincement pour zoomer le geste qui amène aussi l'utilisateur en plein écran contourne cette idée géniale. – Roger

+0

et essayez de supprimer les mouvements – SAKrisT

+1

Apple rejettera probablement votre application si vous essayez de modifier MPMovePlayerController au-delà de l'API publique. Voici une citation de [docs d'Apple] (https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/Reference/Reference.html): "Considérez une vue de lecteur de film comme opaque Vous pouvez ajouter vos propres sous-vues personnalisées pour superposer le contenu en haut du film mais vous ** ne devez jamais modifier ses sous-vues existantes. ** " – n8tr

11

juste fait:

- (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

Bonne idée, je pensais pouvoir l'utiliser pour déclencher une alerte pour expliquer pourquoi fullscreen n'était pas autorisé dans le contexte actuel et le forçait à rester en mode embarqué. Malheureusement, ce qui se passe réellement, c'est que vous obtenez encore la transition en plein écran, puis ça revient à être intégré, ce qui est vraiment horrible. – Roger

+0

Je viens d'essayer de le faire, mais malheureusement fullscreen ignore le MPMovieControlStyleEmbedded et utilise FullScreen, qui, quand je bascule en plein écran alors, il va encore plus grand :( – lordB8r

2

bouton Fullscreen avec bouton de pause peut être retirée.

[self.videoPlayer setControlStyle:MPMovieControlStyleNone]; 
3

afin de désactiver le passage en mode plein écran, des boutons de forme ou d'un geste de pincement, vous pouvez utiliser ceci:

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

Je sais, c'est un peu vieillot, mais de toute façon. J'ai fait des recherches dans ce sens et j'ai l'impression d'avoir trouvé une réponse. Je ne sais pas, pourquoi ça marche, mais ça l'est.

-(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]; 
} 

// Une fois l'animation terminée, relâchez le contrôleur.

-(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

Si le ne chose que vous voulez faire est pincée désactiver pour passer en mode plein écran (à savoirmaintenir l'interaction activée et quel que soit le style de contrôle que vous voulez), vous pouvez utiliser ceci:

- (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

bloc simple pour supprimer pincée de zoom ici

espère que cela aide

ça marche avec moi sur iOS6

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

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

Vous pouvez définir controlStyle sur Fullscreen. ces contrôles sont quelque peu différents, mais ils ne disposent pas d'un bouton plein écran!

[_moviePlayerController setControlStyle:MPMovieControlStyleFullscreen]; 
+0

Genius! Ce devrait certainement la meilleure réponse – PICyourBrain

2

Cela a fonctionné sur iOS 7, iPhone 5s. Notez que j'écoute seulement "DID" et pas la notification "WILL" ainsi que l'exécuter animée. Je pense que cela fonctionne car cela donne au système le temps de réagir. Lorsque j'ai utilisé le "WILL" et "DID" comme indiqué dans les réponses ci-dessus, cela a conduit à un écran noir sans contrôles. Il y a un petit pépin qui est visible quand la transition se produit, mais j'ai besoin des boutons de lecture/nettoyage à partir de l'image intégrée.

5

Malheureusement, aucun d'entre ci-dessus a fonctionné pour moi bien, si la cueillette qui précède, je mis à exécution les suivantes (et a bien fonctionné):

  1. Masquer le bouton plein écran.

Ajoutez ce code dans la méthode d'initialisation du lecteur vidéo.

 

    .... 

     //Because we have to wait until controllers are shown 

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

    ... 

Ajouter les méthodes:

 

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

      } 

     } 

    } 

Le problème repose qu'il n'y a pas d'étiquette pour identifier vue que vous devez cacher. Dans mon cas je le découvre par les coordonnées de la vue.

  1. Remplacer les gestes du tap pour ne pas autoriser le zoom en plein écran.
 

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

et ajoutez les méthodes de sélection:

 

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

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

+0

La première solution a fonctionné parfaitement pour moi, Au bas de la version Swift – diegomen

+0

il cache l'épurateur pas le bouton plein écran –

0

Mettez un UIView ou UIButton avec un fond transparent au-dessus de la vue qui montre la vidéo, de sorte que l'utilisateur ne sera pas en mesure de appuyez sur la vue qui contient la vidéo.

1

Ceci est la version Swift de la première solution de Javier Calatrava Llavería:

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

Et lorsque l'utilisateur tape sur Play:

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

(VideoViewController est le contrôleur de vue dans lequel je le MPMoviePlayerController)

Questions connexes