2010-11-03 11 views
0

J'ai une vidéo dans mon application, mais en mode portrait. Je veux l'afficher en mode paysage, mais je n'ai aucune idée de comment le faire.Voir la vidéo en mode paysage

J'ai utilisé ce code pour faire ma vidéo:

- (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]; 
    }*/ 
} 

Peut-être que quelqu'un peut me donner un indice ou une méthode pour que je puisse mettre ce au paysage?

J'ai utilisé ce code:

[MPMoviePlayerController setOrientation:UIDeviceOrientationLandscapeLeft animated:NO]; 

mais il me donne l'avertissement:

MPMoviePlayerController peut ne pas répondre à -setOrientation:animated:

Qu'est-ce qui se passe?

Répondre

2

eu ce problème aussi bien, je fonctionner dans le fichier appDelegate, ce qui signifiait que je devais forcer la fenêtre pour changer de paysage si l'original est comme ceci:

-(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]; 
} 

tout ce qui est nécessaire est d'ajouter ces lignes:

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

avant la [player play], et à l'arrivée film appel, ajouter

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

pour réinitialiser la vue.

Je ne sais pas si c'est la bonne façon de le faire, mais c'était la seule chose qui fonctionnait pour moi.

0

Utilisez MPMoviePlayerViewController au lieu de MPMoviePlayerController. Il va gérer l'orientation, le style de contrôle, etc J'ai référé this answer pour le même.

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

et dans le AppDelegate.m, déclare la fonction suivante qui va limiter l'orientation portrait dans tous les cas et ne changera que lorsque une vidéo joue

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