2016-05-02 17 views
0

Verwenden Sie eine MPMoviePlayerController.view als Hintergrund (think spotify). Ein Benutzer kann auf Anmeldung oder Anmeldung tippen und sie werden zum entsprechenden viewController geleitet, der über einen klaren Hintergrund verfügt, so dass die moviePlayer.view im Hintergrund bleibt (dh der Benutzer sieht das Video unabhängig vom aktuell aktiven viewController) .iOS - MPMoviePlayerController setzt die Ansichts-Transformation bei Wiederholung zurück

Bei einigen ViewControllern muss das Formular angehoben werden, damit die Tastatur das Feld nicht abdeckt. Ich mache das mit einer Transformation.

Das Hintergrundvideo des moviePlayers wird auf "Wiederholen" gesetzt, sodass das Video in einer Endlosschleife wiedergegeben wird. Jedes Mal, wenn das Video zurückgesetzt wird (der Video-Status wechselt von 1 zu 2 - Pause bis zur Wiedergabe), wird die Transformation in der untergeordneten Ansicht zurückgesetzt. Mein erster Gedanke war, dass die Ansicht neu gezeichnet wurde, aber das scheint nicht der Fall zu sein, basierend auf Protokollen (ich habe nslogs in die drawRect der Ansichten geschrieben, aber es wird nur einmal bei der Instantiierung aufgerufen).

Ist jemand auf dieses gestoßen?

Mein Setup im Stammviewcontroller:

// lazy load moviePlayer 
-(MPMoviePlayerController *)moviePlayer 
{ 
    if (_moviePlayer) return _moviePlayer; 

    NSURL *videoURL = [[NSBundle mainBundle] URLForResource:@"resources.bundle/videos/auth_bg" withExtension:@"mp4"]; 
    _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
    _moviePlayer.controlStyle = MPMovieControlStyleNone; 
    _moviePlayer.scalingMode = MPMovieScalingModeAspectFill; 
    _moviePlayer.repeatMode = MPMovieRepeatModeOne; 
    _moviePlayer.shouldAutoplay = true; 

    return _moviePlayer; 
} 

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    self.moviePlayer.view.frame = self.view.frame; 
    self.moviePlayer.view.hidden = false; 
    // 'still' is an imageView of the first frame to show while video loading 
    [self.navigationController.view insertSubview:self.moviePlayer.view aboveSubview:still]; 
} 

Antwort

0

Ich vermute, das mit Autolayout zu tun hat - ich ein paar andere Fragen gefunden, wo Ansichten zurückgesetzt wurden (hier ein Beispiel: https://stackoverflow.com/a/17849584/1542275) ... Meine Die Lösung bestand darin, die Konstanten der Layout-Abhängigkeit anzupassen, anstatt die Koordinaten der Ansicht zu transformieren. Die Dinge bleiben jetzt stehen.

Alles gesagt, ich bin mir immer noch nicht sicher, warum der Video-Neustart die Transformationen zurückgesetzt wird.