在iOS8中使用Landscape Correct Statusbar在Portrait App中播放风景视频

时间:2014-09-26 12:08:19

标签: xcode video ios8 orientation mpmovieplayercontroller

Portrait App,加载以横向显示的视频。

iOS7中的

一切正常(小修复这也是iOS6)但在iOS8状态栏中,虽然在横向显示实际上显示的是纵向状态栏的大小,因此它只占据左上角60%的视频(如果在景观中持有设备。)

我使用的代码如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [planTitleLabel setText:[[ProgrammeHandler sharedHandler]
                             stringForElement:kPlanStringElementPlanTitle
                             onDay:0 inPlan:selectedPlan]];
}

- (NSUInteger)supportedInterfaceOrientations{
    return 0;
}

-(void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];


    if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0) {
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:FALSE];
        [[UIApplication sharedApplication] setStatusBarHidden:TRUE withAnimation:UIStatusBarAnimationNone];
    }else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0 && [[UIDevice currentDevice].systemVersion floatValue] < 9.0) {
        [[UIApplication sharedApplication] setStatusBarHidden:TRUE];
    }


    NSString *moviePath = [[ProgrammeHandler sharedHandler] pathForAsset:kAssetVideoIntro onDay:0 forPlan:selectedPlan];
    CGSize screenBounds = [[UIScreen mainScreen] bounds].size;
    [whiteFadeView setFrame:CGRectMake(0, 0, screenBounds.width, screenBounds.height)];

    NSURL *videoURL = [NSURL fileURLWithPath:moviePath];
    moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
    [[moviePlayer view] setBackgroundColor:[UIColor blackColor]];
    [moviePlayer setControlStyle:MPMovieControlStyleNone];
    [moviePlayer setScalingMode:MPMovieScalingModeAspectFill];
    //For viewing partially.....
    moviePlayer.view.transform = CGAffineTransformMakeRotation(M_PI/2);
    [moviePlayer setScalingMode:MPMovieScalingModeAspectFill];
    [movieView setAlpha:0];

    [moviePlayer.view setFrame:[movieView frame]];
    moviePlayer.view.backgroundColor = [UIColor blackColor];

    [movieView addSubview:moviePlayer.view];

    [moviePlayer prepareToPlay];
    [moviePlayer play];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playbackFinished:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(hideControl)
                                                 name:MPMoviePlayerLoadStateDidChangeNotification
                                               object:moviePlayer];

    [UIView animateWithDuration:0.5f delay:0.50f
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{[movieView setAlpha:1];} completion:^(BOOL fin){ }];
}

- (void) hideControl {
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerNowPlayingMovieDidChangeNotification
                                                  object:moviePlayer];
    [moviePlayer setControlStyle:MPMovieControlStyleFullscreen];
}

我确实看到了这个问题但不认为它适用于我的情况。 iphone: rotation in mpmovieplayercontroller?

是否有人知道如何将状态栏恢复为全屏&#39;宽度&#39;?

1 个答案:

答案 0 :(得分:2)

好的,今天再看一遍后我发现有一个错误,iOS7似乎很满意,但它正确地在iOS8中抛出一个错误。对于有同样问题的其他人:

修复只是将转换应用于moviePlayer本身而不是子视图。例如

替换     moviePlayer.view.transform = CGAffineTransformMakeRotation(M_PI / 2); 同     movieView.transform = CGAffineTransformMakeRotation(M_PI / 2);