Задержка между кнопкой воспроизведения и показом фильма - PullRequest
0 голосов
/ 10 октября 2010

У меня есть простое представление, которое создает MPMoviePlayerViewController, когда пользователь нажимает кнопку, используя presentMoviePlayerViewControllerAnimated: метод.Новый контроллер вида скользит и показывает проигрыватель фильмов, пока что все хорошо.

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

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

Ответы [ 4 ]

0 голосов
/ 03 февраля 2011

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

В моем случае я помещаю 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];
0 голосов
/ 14 ноября 2010

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

  theMovieVC.view.backgroundColor = [UIColor blackColor];
0 голосов
/ 18 ноября 2010

это то, что я делаю для 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 вы можете создать то, что вам нужно (например, UIActivityIndicatorView). Контроллер вида будет заменен только после завершения предварительной загрузки.

0 голосов
/ 31 октября 2010

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

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

...