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



我有一个要求,其中包含视频的界面仅为人像,但当用户旋转到横向时,视频将进入全屏并开始播放,然后当视频到达结尾或用户单击完成时,视频退出全屏,界面仍为人像。我尝试过使用shouldAutorotateToInterfaceOrientation:方法来启动视频。但我无法让屏幕再次旋转回来。我决定使用should AutorotateToInterfaceOrientation:并创建自己的视图控制器来仅处理视频,并使用-[UIWiew 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
    }

有人能给我什么建议吗?我现在认为我应该实现自己向全屏的过渡,让它发挥作用,但我想我会先得到一些反馈。

我也被这件事弄糊涂了。。。与设备和视图旋转等问题作斗争,甚至设法使事情基本正常,但我不断发现还有一种情况会破坏它(例如,用户在旋转时进出全屏,播放后神秘地丢失状态栏,等等)。

我希望你能按照你在这里提出的思路找到一个解决方案(我期待着从中学习)。否则,你可以像我一样,从半失败的深渊中夺取半胜利,如下所示:

  • 为电影创建一个新的仅横向视图控制器玩。只需回答即可实现横向定位应自动旋转界面方向:
  • 从你正在开发的VC中找出所有丑陋的定向代码,并简单地在新的上显示ModalViewController。(你甚至可以有一个很酷的免费过渡效果,就像垂直滑入)
  • 观看时加载并播放电影DidPear
  • 在横向视频VC中,订阅MPMoviePlayerPlaybackDidFinishNotification,在通知时,do[selfdisseModalViewController:YES]

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

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

最新更新