Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: VisuОтветов: 2

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

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

iphonejavascriptuinavigationcontrollervideouiwebview

Ответы

Ответ 1 · JFoulkes

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

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

Это также зависит от того, какую версию 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];

Ответ 2 · Visu

Ниже приведен фрагмент кода того, как я создаю свой 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, в который встроено видео.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы