Просмотр видео в ландшафтном режиме - PullRequest
0 голосов
/ 03 ноября 2010

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

Я использовал этот код для создания своего видео:

- (IBAction)playMovie:(id)sender
{
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"BAZO" ofType:@"m4v"];
    NSURL *fileURL = [NSURL fileURLWithPath:filepath];
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:)name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];

    [self.view addSubview:moviePlayerController.view];
    moviePlayerController.fullscreen = YES;
    //Uncomment om beeld formaat aan te passen
    //moviePlayerController.scalingMode = MPMovieScalingModeAspectFill;
    [moviePlayerController play];
}

- (IBAction)playSecondMovie:(id)sender
{
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"00 01. Welcome" ofType:@"mov"];
    NSURL *fileURL = [NSURL fileURLWithPath:filepath];
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:)name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];

    [self.view addSubview:moviePlayerController.view];
    moviePlayerController.fullscreen = YES;
    //Uncomment om beeld formaat aan te passen
    //moviePlayerController.scalingMode = MPMovieScalingModeAspectFill;
    [moviePlayerController play];
}

- (void)moviePlaybackComplete:(NSNotification *)notification
{
    MPMoviePlayerController *moviePlayerController = [notification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];

    [moviePlayerController.view removeFromSuperview];
    [moviePlayerController release];
}

-(void) tableView: (UITableView*) tableView 
didSelectRowAtIndexPath: (NSIndexPath*) indexPath
{
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"BAZO" ofType:@"m4v"];
    NSURL *fileURL = [NSURL fileURLWithPath:filepath];
    MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:)name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];

    [self.view addSubview:moviePlayerController.view];
    moviePlayerController.fullscreen = YES;
    //Uncomment om beeld formaat aan te passen
    //moviePlayerController.scalingMode = MPMovieScalingModeAspectFill;
    [moviePlayerController play];

    /*-(void)loadVideo:(NSString *)name ofType:(NSString *)type{
    NSURL *url=[NSURL fileURLWithPath:[mainBundle pathForResource:@"BAZO"  ofType:@"m4V"]]
    if (!mp) mp = [[MPMoviePlayerController alloc] initWithContentURL:url];
    [mp play];
    }*/
}

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

Я использовал этот код:

[MPMoviePlayerController setOrientation:UIDeviceOrientationLandscapeLeft animated:NO];

но это дает мне предупреждение:

MPMoviePlayerController может не отвечать на -setOrientation:animated:

Что происходит?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

Имелась и эта проблема, Я запустил его в файле appDelegate, что означало, что я должен был заставить окно изменить ландшафт, поэтому, если оригинал выглядит так:

-(void)playMovie {
    NSString *url = [[NSBundle mainBundle] 
                     pathForResource:@"intro" 
                     ofType:@"m4v"];

    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:url]];
    [[NSNotificationCenter defaultCenter] 
     addObserver:self
     selector:@selector(movieFinishedCallback:)
     name:MPMoviePlayerPlaybackDidFinishNotification
     object:player];

    [player setFullscreen:YES animated:YES];
    [player setControlStyle:MPMovieControlStyleNone];
    [window addSubview:player.view];
    [window bringSubviewToFront:player.view];
    [player setFullscreen:YES animated:YES];
    [player setControlStyle:MPMovieControlStyleNone];

    [player play];
}

все, что нужно, это добавить следующие строки:

[window setBounds:CGRectMake(  0, 0, 480, 320)];
[window setCenter:CGPointMake(160, 240];    
[window setTransform:CGAffineTransformMakeRotation(M_PI/ 2)];

перед [player play], а при завершении вызова фильма добавьте

struct CGRect rect = [[UIScreen mainScreen] bounds];
rect.origin.x = rect.origin.y = 0.0f;   
window =[[UIWindow alloc] initWithFrame:rect];
[window makeKeyAndVisible];

для сброса вида.

Не уверен, что это правильный способ, но это было единственное, что сработало для меня.

0 голосов
/ 10 октября 2014

Используйте MPMoviePlayerViewController вместо MPMoviePlayerController.Он будет обрабатывать ориентацию, стиль управления и т. Д. Я прислал этот ответ для того же самого.

MPMoviePlayerViewController *playerView = [[[MPMoviePlayerViewController alloc] initWithContentURL:videoURL] autorelease];
[self presentMoviePlayerViewControllerAnimated:playerView];

и в AppDelegate.m объявим следующую функцию, которая ограничит ориентациюпортрет во всех случаях и будет меняться только при воспроизведении видео

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if ([[self.window.rootViewController presentedViewController] isKindOfClass:[MPMoviePlayerViewController class]])
    {
        return UIInterfaceOrientationMaskAll;
    }
    else
    {
        //NSLog(@"orientation should change");
        return UIInterfaceOrientationMaskPortrait;
    }
}
...