2011-06-22 12 views
2

私は、UIViewをランドスケープ上の適切なサイズにレンダリングするMPMoviePlayerControllerを使用していますが、ポートレートに回転するとサイズ変更されません。私は親のUIViewはサイズ変更されていないと思う。どうすれば設定できますか?MPMoviePlayerControllerビューのサイズが変更されない

@Alex Reynoldsが指示する指示に従いましたUIView autoresizingmask not working for me。これは、回転したときにビューのサイズが変更されることを示していました。私はまだ、プレーヤーを保持しているUIViewControllerUIViewがロードされているとき、デバイスの向きが横長であれば、それは右のフレームにレンダリングされるが、デバイスがロードされるまでにデバイスが縦長になっている場合それにリサイズされません。 @Alex Reynoldsの答えでは、私がしなければならないことは、デバイスを一度回転させるだけで、その後は適切にサイズ変更が始まります。

最初にサイズを変更しないことは、まだ悪いことです。これは以前誰にも起こったのですか?そうであれば、どんな入力でも大歓迎です。

答えて

2

MPMoviePlayerControllerのviewのautoresizingMaskを適切に設定しましたか?スーパービューのautoresizesSubviewsプロパティがYESに設定されていますか? (また、回転中にこのスーパービューのサイズも変更されますか?テスト中に私のビューにカラフルな背景色を設定して、自動回転時にサイズが正しく変更されていることを確認したい)

これらのプロパティを確認しても機能しない場合は、常にムービープレーヤーのビューのframeプロパティを手動で設定します。スーパービューのlayoutSubviewsメソッドは一般的にそれを行うのに最適ですが、手動でサブクラス化したビューでない場合は、ビューコントローラでも行うことができます。

+0

私は正しくautoresizingMaskを設定していると思います。私はself.player.view.autoresizingMaskを持っている= UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin。私は質問に多くの情報を追加しました。 –

1
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[self play]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

} 
-(IBAction)dismiss:(id)sender 
{ 
//[self.view removeFromSuperview]; 

_moviePlayer =nil; 

[self dismissViewControllerAnimated:YES completion:nil]; 
} 
// Do any additional setup after loading the view from its nib. 
-(void)play 
{ 

    NSURL *url = [NSURL URLWithString:@"stringurlvideo"]; 
    _moviePlayer = [[MPMoviePlayerController alloc]initWithContentURL:url]; 
    // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) 
     //  name:MPMoviePlayerPlaybackDidFinishNotification 
    //            object:_moviePlayer]; 
    // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFull:) 
             //  name:MPMoviePlayerDidEnterFullscreenNotification 
             //  object:_moviePlayer]; 
    // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidExit:) 
              //  name:MPMoviePlayerDidExitFullscreenNotification 
              //  object:_moviePlayer]; 
    _moviePlayer.controlStyle = MPMovieControlStyleDefault; 
    _moviePlayer.shouldAutoplay = YES; 
if([[UIScreen mainScreen] bounds].size.height==568) 
    { 

    [_moviePlayer.view setFrame:CGRectMake(0,200, 320, 200)]; 
    } 
else 
    { 
    [_moviePlayer.view setFrame:CGRectMake(0,150, 320, 200)]; 

    } 
    [self.view addSubview:_moviePlayer.view]; 
    //[_moviePlayer.view setCenter:self.view.center]; 
    [_moviePlayer setFullscreen:YES animated:YES]; 

    } 
- (void) moviePlayBackDidFull:(NSNotification*)notification 
    { 


    } 
-(void)moviePlayBackDidExit:(NSNotification*)notification 
{ 
////[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 




} 
-(void)viewWillAppear:(BOOL)animated 
    { 
/* if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait) 
    { 
     [_moviePlayer.view setFrame:CGRectMake(0,200, 320, 200)]; 
    CGRect rect=[bar frame]; 
    rect.size.width=self.view.frame.size.width; 
    [bar setFrame:rect]; 

    } 
    else 
    { 

    CGRect rect=[bar frame]; 
    rect.size.width=480; 
    [bar setFrame:rect]; 
    [_moviePlayer.view setFrame:CGRectMake(0,44, 480, 320-44)]; 

    }*/ 

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

    if ([player 
     respondsToSelector:@selector(setFullscreen:animated:)]) 
    { 
     [player.view removeFromSuperview]; 
    } 
    } 

- (void)didReceiveMemoryWarning 
    { 
    [super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
    } 


    -(NSUInteger)supportedInterfaceOrientations 
    { 
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown); 
    } 


- (BOOL)shouldAutorotate 
{ 
return YES; 
    } 
    /*- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
return UIInterfaceOrientationLandscapeLeft; 
}*/ 
    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
    { 
if(toInterfaceOrientation==UIInterfaceOrientationPortrait && toInterfaceOrientation!=UIInterfaceOrientationPortraitUpsideDown) 
    { 

    if([[UIScreen mainScreen] bounds].size.height==568) 
    { 

    [_moviePlayer.view setFrame:CGRectMake(0,200, 320, 200)]; 
    } 
    else 
    { 
     [_moviePlayer.view setFrame:CGRectMake(0,150, 320, 200)]; 

    } 
    CGRect rect=[bar frame]; 
    rect.size.width=self.view.frame.size.width; 
    [bar setFrame:rect]; 
    } 
    else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation ==UIInterfaceOrientationLandscapeRight) 
    { 
    CGRect rect=[bar frame]; 
    if([[UIScreen mainScreen] bounds].size.height==568) 
    { 
    rect.size.width=568; 
    } 
    else{ 
     rect.size.width=480; 

    } 
    [bar setFrame:rect]; 
    [_moviePlayer.view setFrame:CGRectMake(0,44, rect.size.width, 320-44)]; 
     } 
     } 
    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
     { 
    /* if(fromInterfaceOrientation==UIInterfaceOrientationPortrait && fromInterfaceOrientation!=UIInterfaceOrientationPortraitUpsideDown) 
     { 
     CGRect rect=[bar frame]; 
    rect.size.width=568; 
    [bar setFrame:rect]; 
    [_moviePlayer.view setFrame:CGRectMake(0,44, 480, 320-44)]; 
    } 
    else 
    { 
    [_moviePlayer.view setFrame:CGRectMake(0,200, 320, 200)]; 
    CGRect rect=[bar frame]; 
    rect.size.width=self.view.frame.size.width; 
    [bar setFrame:rect]; 
    }*/ 
    } 
    - (void)didRotate:(NSNotification *)notification 
    { 
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
if (orientation == UIInterfaceOrientationLandscapeLeft || orientation  ==UIInterfaceOrientationLandscapeRight) 
    { 
    CGRect rect=[bar frame]; 
    if([[UIScreen mainScreen] bounds].size.height==568) 
    { 
     rect.size.width=568; 
    } 
    else{ 
     rect.size.width=480; 

    } 
    [bar setFrame:rect]; 
    [_moviePlayer.view setFrame:CGRectMake(0,44, rect.size.width, 320-44)]; 

    } 
else if(orientation==UIInterfaceOrientationMaskPortrait && orientation!=UIDeviceOrientationPortraitUpsideDown) 
    { 
    if([[UIScreen mainScreen] bounds].size.height==568) 
    { 
    [_moviePlayer.view setFrame:CGRectMake(0,200, 320, 200)]; 
    } 
    else 
    { 
     [_moviePlayer.view setFrame:CGRectMake(0,150, 320, 200)]; 

    } 
    CGRect rect=[bar frame]; 
    rect.size.width=self.view.frame.size.width; 
    [bar setFrame:rect]; 

    } 
} 
関連する問題