Question

Je suis passé par l'exemple de la pomme "MoviePlayer sur iPhone"

Im essayant de superposer au-dessus du MPMoviePlayerController,

il fonctionne parfaitement avec clip vidéo qui est en paquet,

mais il ne fonctionnera pas si streamer la vidéo de l'url.

la vue superposition juste se cacher derrière le joueur.

est-il un moyen d'amener la superposition vue vers le haut à l'avant?

Était-ce utile?

La solution

MPMoviePlayerController crée sa propre fenêtre et définit que la fenêtre clé -. Vous le savez probablement déjà de l'exemple d'application MoviePlayer

Je ne sais pas pourquoi, mais il y a un retard lorsque le joueur utilise un flux - de sorte que le keyWindow vous obtenir juste après l'initialisation du lecteur est probablement pas la fenêtre du joueur, puisque cela semble s'ajouté plus tard

Vous pouvez « tricher » et utiliser une minuterie pour obtenir la fenêtre du lecteur quelques secondes plus tard, et ajoutez votre superposition:

[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(addMyOverlay:) userInfo:nil repeats:FALSE]

Vous pouvez écouter l'événement de UIWindowDidBecomeKeyNotification, et faire la même chose:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil];

Aucune de ces options est grande (j'aimerais savoir un moyen plus propre de le faire), mais il fait le travail.

Autres conseils

Vous pouvez superposer votre avis lorsque vous recevez une notification "de MPMoviePlayerContentPreloadDidFinishNotification".

Inscrivez-vous pour la notification:

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(moviePreloadDidFinish:) 
                                             name:MPMoviePlayerContentPreloadDidFinishNotification 
                                           object:nil];

Ajout d'une vue de superposition lors de la réception de la notification:

//  Notification called when the movie finished preloading.
- (void) moviePreloadDidFinish:(NSNotification*)notification
{
    NSArray *windows = [[UIApplication sharedApplication] windows];
    if ([windows count] > 1)
    {
        // Locate the movie player window
        UIWindow *moviePlayerWindow = [[UIApplication sharedApplication] keyWindow];
        if ([moviePlayerWindow viewWithTag:0x3939] == nil) {
            self.videoOverlayView.tag = 0x3939;
            [moviePlayerWindow addSubview:self.videoOverlayView];
        }
        [moviePlayerWindow bringSubviewToFront:self.videoOverlayView];
    }
}

Une solution très simple:

appDelegate.window.backgroundColor = [UIColor clearColor];
appDelegate.window.windowLevel = 2;

Cela permet de garder votre interface utilisateur de l'application au-dessus de la fenêtre vidéo.

mon message

Réponse précédente était basée sur la minuterie. Et fixe 5 secondes.

Quand le joueur de film commence, une nouvelle fenêtre est ajoutée à l'application.

Utilisez une minuterie pour vérifier une nouvelle fenêtre météo est ajoutée à votre application ou non.

Lorsqu'une fenêtre (fenêtre du lecteur de film) est ajouté. définir des notifications.

-(void)viewDidLoad{

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePreloadDidFinish:) 
                                                 name:MPMoviePlayerContentPreloadDidFinishNotification 
                                               object:nil];

    // Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePlayBackDidFinish:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:nil];

    // Register to receive a notification when the movie scaling mode has changed. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(movieScalingModeDidChange:) 
                                                 name:MPMoviePlayerScalingModeDidChangeNotification 
                                               object:nil];
    videoListController.xmlClassVideoList=t;
    // here ttttt is a timer declared in .h file
    tttttt=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self      selector:@selector(startMy) userInfo:nil repeats:YES];  
}

-(void)startMy{
    NSArray *windows = [[UIApplication sharedApplication] windows];  
    NSLog(@"%i",[windows count]);
    // depends on your application window
    // it may be 1/2/3
    if ([windows count] > 3) {
        // Locate the movie player window
        [tttttt invalidate];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil];
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top