MPMoviePlayerController контролирует, когда открывается в модальном стиле UIModalPresentationFormSheet, и пользователь делает видео полноэкранным - PullRequest
0 голосов
/ 12 октября 2011

В моем приложении для iPad у меня есть UIButton, который вызывает IBAction, чтобы вызвать контроллер представления как модал для показа видео. Я хотел, чтобы модал отображался как 720x405, и эта часть, кажется, работает хорошо.Вот код IBAction, который выполняет кнопка:

    -(IBAction)videoPlayerTest:(id)sender {
        VideoModalViewController *vc = [[VideoModalViewController alloc] initWithNibName: @"VideoModalViewController" bundle: nil];
        vc.fileName = @"testvideo.m4v";
        vc.modalPresentationStyle = UIModalPresentationFormSheet;
        [self presentModalViewController:vc animated: YES];
        vc.view.superview.frame = CGRectMake(0, 0, 720, 405); 
        vc.view.superview.center = self.view.center;
        [vc release];
    }

Модал появляется там, где я хочу, и элементы управления отвечают на MPMoviePlayerController;джог-бар, пауза, воспроизведение и т. д., но если пользователь нажимает на полноэкранную кнопку, видео переходит в полноэкранный режим, но после этого MPMoviePlayerController не будет реагировать на любые последующие нажатия на элементы управления проигрывателем.Если я удалю строку modalPresentationStyle, она будет работать, но модал появляется в полноэкранном режиме вместо 720x405, как я хочу.Я добавил Обозреватели, чтобы попытаться изменить размер кадра и перенастроить его, когда пользователь переводит контроллер фильма в полноэкранный режим и обратно в оконный режим, но, похоже, это совсем не помогло.Вот этот код.

    - (void)willEnterFullscreen:(NSNotification*)notification {
        NSLog(@"willEnterFullscreen");
        [self setModalPresentationStyle:UIModalPresentationFullScreen];
        self.view.frame = CGRectMake(0, 0, 1024, 768);
        self.view.center = self.view.center;
    }

    - (void)willExitFullscreen:(NSNotification*)notification {
        NSLog(@"willExitFullscreen");
        [self setModalPresentationStyle:UIModalPresentationFormSheet];
        self.view.frame = CGRectMake(0, 0, 720, 405);
        self.view.center = self.view.center;
    }

    - (void)playMovie {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterFullscreen:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willExitFullscreen:) name:MPMoviePlayerWillExitFullscreenNotification object:nil];

        NSString *videoString = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
        NSURL *videoURL = [NSURL fileURLWithPath:videoString];
        moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
        [self.view addSubview:moviePlayer.view];
        moviePlayer.view.frame = CGRectMake(0, 0, 720, 405);
        moviePlayer.view.backgroundColor = [UIColor grayColor];
        [moviePlayer prepareToPlay];
        [moviePlayer play];
    }

Это мой первый пост - надеюсь, я все сделал правильно и предоставил достаточно информации о проблеме, с которой я столкнулся.

1 Ответ

4 голосов
/ 13 октября 2011

Я решил свою проблему.Я не знал о MPMoviePlayerViewController, и я создал его и использовал вместо этого в качестве модального.Это прекрасно работает.

    -(void)playVideo:(NSString *)fileName {
        NSString *videoString = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
        NSURL *videoURL = [NSURL fileURLWithPath:videoString];
        mpViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];
        [self presentModalViewController:mpViewController animated:NO];
        [[mpViewController moviePlayer] play];
    }

    -(IBAction)videoPlayerTest:(id)sender {
        [self playVideo:@"testvideo.m4v"];
    }

Думал, что я опубликую то, что придумал, на случай, если кто-то еще столкнется с тем же

...