Воспроизвести видео, вызванное из Javascript, на UINavigationController в iPhoneSDK

У меня есть приложение, и при нажатии кнопки я хочу создать UINavigationController на лету. Текущий вид на navigationController будет UIWebView отображающим JavaScript со встроенным видео. Когда я нажимаю кнопку воспроизведения видео, оно начинает воспроизводиться, но я не могу видеть видео на переднем плане. Я могу посмотреть видео, только если полностью отклоню UINavigationController.

Как мне сделать так, чтобы когда я нажимаю кнопку "Воспроизвести" в UIWebView внутри UINavigationController, рендерил видео в нативном плеере на переднем плане, а при нажатии на "Готово" в нативном плеере возвращался в " UINavigationController" ?


person Visu    schedule 01.03.2011    source источник


Ответы (2)


Как вы показываете инициализацию контроллера просмотра видео?

Вы создаете экземпляр и представляете его в виде модального представления?

Это также зависит от того, какую версию iOS вы используете:

NSString *videoPath = [[NSBundle mainBundle] pathForResource:@"video" ofType:@"mp4"];
NSURL *videoURL = [NSURL fileURLWithPath:videoPath];

if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 3.2) {
    NSLog(@"> 3.2");

    MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];

    self.playerController = player;

    [player release]; player = nil;

    [self presentMoviePlayerViewControllerAnimated: self.playerController];
    self.playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:@"MPMoviePlayerPlaybackDidFinishNotification" object:self.playerController.moviePlayer];


    [self.playerController.moviePlayer play];

} 
else if ([[[UIDevice currentDevice] systemVersion] doubleValue] < 3.2) {
    NSLog(@"< 3.2");

    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL: videoURL];

    player.scalingMode = MPMovieScalingModeAspectFill;

    // Register for the playback finished notification
    [[NSNotificationCenter defaultCenter]
     addObserver: self
     selector: @selector(playbackFinished:)
     name: MPMoviePlayerPlaybackDidFinishNotification
     object: player];

    // Movie playback is asynchronous, so this method returns immediately.
    [player play];
person JFoulkes    schedule 01.03.2011
comment
Загвоздка в том, что мне нужно отображать видео, только если в javascript есть тег видео! Я думаю, что приведенный выше код работает, только если мы точно знаем ссылку на видео. - person Visu; 01.03.2011
comment
У вас есть пример того, как выглядит строка javascript? - person JFoulkes; 01.03.2011

Ниже приведен фрагмент кода того, как я создаю свой UIViewController, который должен отображать видео:

UIViewController *adViewController = [[UIViewController alloc] init];
UIWebView *adView = [[UIWebView alloc] initWithFrame:r];
[adView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:adHTML]]];
adViewController.view = adView;

«adHTML» — это URL-адрес, содержащий javascript, в который встроено видео.

person Visu    schedule 01.03.2011