Задержка между кнопкой воспроизведения и отображением фильма

StackOverflow https://stackoverflow.com/questions/3897903

  •  29-09-2019
  •  | 
  •  

Вопрос

У меня есть простое представление, которое создает mpmovieplayerviewcontroller, когда пользователь нажимает кнопку, используя SuretMoviePlayerVieweScontrollerAnimated: Method. Новый контроллер View встает и показывает игрока в кино, пока все хорошо.

Однако, когда кнопка нажимается, текущий контроллер представления выдвигает нижнюю часть, показывая уродливое (вероятно, по умолчанию) белый вид, который придерживается от полсекунды до нескольких секунд, пока не будет показан контроллер вида фильма. Похоже, что это зависит от моего сетевого соединения, как будто контроллер представления фильма загружает части фильма, прежде чем показывать игрока.

Я делаю что-то не так, или как я могу работать вокруг этого? Я бы очень предпочел просто показать контроллер просмотра фильма напрямую, может быть, даже без скольжения на предыдущем контроллере просмотра, который удерживает кнопку воспроизведения, но все равно анимировал как контроллер модального просмотра.

Спасибо!

Христоф

Это было полезно?

Решение 2

В итоге я просто установил фон вид на черный. Не исправляет задержку, но делает его намного приятнее:

  theMovieVC.view.backgroundColor = [UIColor blackColor];

Другие советы

Решение состояло в том, чтобы инициировать контроллер представления игрока при создании родительского представления, а затем вызов prepareToPlay на moviePlayer внутри него. Это удаляет задержку, когда кнопка воспроизведения нажата и (я думаю) перемещает его, чтобы пользователь добрался до родительского вида, из которого он может воспроизвести фильм.

Редактировать: Это удаляет задержку, но по какой-то причине инициализация контроллера просмотра фильма также автозапуска его, когда он загружен, так что это не хорошее решение.

Это то, что я делаю для iOS> 3.2:

- (void) play {
    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mMovieURL];

    if ([mMoviePlayer respondsToSelector:@selector(loadState)]) 
    {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePreloadDidFinishIOS32:) 
                                                     name:MPMoviePlayerContentPreloadDidFinishNotification 
                                                   object:nil];


        [mMoviePlayer prepareToPlay];
        [mMoviePlayer play];
        mMoviePlayer.controlStyle = MPMovieControlStyleEmbedded;
        [mMoviePlayer setMovieControlMode:MPMovieControlModeDefault];
        [mMoviePlayer setBackgroundColor:[UIColor clearColor]];
    }
}

и

- (void) moviePreloadDidFinishIOS32:(NSNotification*)notification;
{
    // Remove observer
    [[NSNotificationCenter  defaultCenter] 
     removeObserver:self
     name:MPMoviePlayerContentPreloadDidFinishNotification
     object:nil];

    self.view = mMoviePlayer.view;
}

Таким образом, в ViewDidload вы можете создать создание того, что вы хотите (например, uiactianceIndicatorView). Контроллер представления будет заменен только после завершения предварительной нагрузки.

Я замечаю ту же проблему в своем приложении. У кого -нибудь есть предложения, чтобы избежать этой проблемы?

В моем случае я подталкиваю MpmoviePlayerViewController в пользовательский интерфейс как модальное всплывающее окно.

// build the movie player
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
MPMoviePlayerViewController *movieViewController = [[[MPMoviePlayerViewController alloc] initWithContentURL:request.URL] autorelease];
[movieViewController.moviePlayer prepareToPlay];
movieViewController.view.backgroundColor = [UIColor blackColor];

// show the movie player view
[self.parentViewController presentModalViewController:movieViewController animated:YES];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top