当用户旋转到横向时以全屏播放视频,然后在视频停止时以编程方式向后旋转

时间:2012-03-28 02:30:56

标签: iphone ios cocoa video mpmovieplayercontroller

我有一个要求,其中包含视频的界面仅为纵向,但当用户旋转为横向时,视频将进入全屏并开始播放,然后当视频到达终点或用户点击完成时,视频退出全屏,界面仍然是人像。我尝试使用 shouldAutorotateToInterfaceOrientation:方法来启动视频。但我无法让屏幕再次旋转。我已经决定使用 shouldAutorotateToInterfaceOrientation:并创建我自己的视图控制器来处理视频并使用 - [UIView setTransform:]来旋转视频,但旋转只有在我禁用全屏时才有效这是我的代码的一部分

- (void)deviceOrientationDidChangeNotification:(NSNotification *)aNotification
{
    switch ([[UIDevice currentDevice] orientation])
    {
    case UIDeviceOrientationPortrait:
    case UIDeviceOrientationPortraitUpsideDown:
        [self setFullscreen:NO animated:YES];
        break;
    case UIDeviceOrientationLandscapeLeft:
    case UIDeviceOrientationLandscapeRight:
        [self.moviePlayerController play];
        [self setFullscreen:YES animated:YES];
        break;
    default:
        break;
    }
}

    - (void)setFullscreen:(BOOL)aFullScreen animated:(BOOL)anAnimated
    {
        if( aFullScreen )
        {
            switch ([[UIDevice currentDevice] orientation])
            {
                case UIDeviceOrientationLandscapeLeft:
                case UIDeviceOrientationPortraitUpsideDown:
                    self.moviePlayerController.view.transform = CGAffineTransformMakeRotation(M_PI_2);
                    break;
                case UIDeviceOrientationPortrait:
                case UIDeviceOrientationLandscapeRight:
                    self.moviePlayerController.view.transform = CGAffineTransformMakeRotation(M_PI+M_PI_2);
                    break;
                default:
                    break;
            }
        }
        else
            self.moviePlayerController.view.transform = CGAffineTransformMakeRotation(0);
        [self.moviePlayerController setFullscreen:aFullScreen animated:anAnimated];     // comment this out and rotation works
    }

任何人都可以给出任何建议,我现在认为我应该实现自己的全屏过渡以使其工作,但我想我会先得到一些反馈。

1 个答案:

答案 0 :(得分:3)

我也一直对此感到茫然......与设备和视图旋转以及诸如此类的东西搏斗,甚至设法使事情大部分都有效,但我不断发现还有一个案例破坏它(例如,用户在旋转时进出全屏,在播放后神秘地丢失状态栏等等。)

我希望你能找到你所建议的解决方案(我期待从中学习)。否则,你可以做我所做的,从半失败的下颚中夺取半胜利如下:

  • 专门为电影创建一个新的仅横向视图控制器 播放。它只需通过回答即可实现横向定位 shouldAutorotateToInterfaceOrientation:
  • 从您正在使用的VC中挖掘所有丑陋的方向代码, 并简单地presentModalViewController:在新的。 (你甚至可以 有一个很酷的免费转换效果,就像垂直幻灯片一样。)
  • 在viewDidAppear
  • 时加载并播放影片
  • 在风景视频VC中,订阅 MPMoviePlayerPlaybackDidFinishNotification,在通知时,执行[self dismissModalViewController:YES];

所有这些的一个附带好处是,电影播放器​​处理逻辑可以放在一个地方,并在您的应用程序中轻松重用。

祝你好运。 (如果需要,我可以提供详细的代码。)