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

Iphone 在用户旋转到横向时全屏播放视频,然后在视频停止时以编程方式向后旋转,iphone,ios,cocoa,video,mpmovieplayercontroller,Iphone,Ios,Cocoa,Video,Mpmovieplayercontroller,我有一个要求,即包含视频的界面仅为纵向,但当用户旋转横向时,视频进入全屏并开始播放,然后当视频结束或用户单击“完成”时,视频退出全屏,界面仍为纵向。我尝试过使用shouldAutorotateToInterfaceOrientation:方法来启动视频。但我无法让屏幕再次旋转。我决定改为使用shouldAutorotateToInterfaceOrientation:并创建我自己的视图控制器以仅处理视频,并使用-[UIView setTransform:]旋转视频,但旋转只有在我禁用全屏时才起作

我有一个要求,即包含视频的界面仅为纵向,但当用户旋转横向时,视频进入全屏并开始播放,然后当视频结束或用户单击“完成”时,视频退出全屏,界面仍为纵向。我尝试过使用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
    }

有人能给我一些建议吗?我现在想我应该实现我自己的全屏转换,让它工作起来,但我想我会先得到一些反馈。

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

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

  • 为电影创建新的仅横向视图控制器 玩。它只需回答以下问题即可实现横向定位 应自动旋转指针面方向:
  • 从你正在做的VC中找出所有难看的方向代码, 简单介绍一下Modalviewcontroller:在新的上。(你甚至可以 有一个很酷的免费转场效果,比如垂直滑入)
  • 当ViewDid出现时加载并播放电影
  • 在景观视频VC中,订阅 MPMoviePlayerPlaybackDidFinishNotification,on notify,do[self dismissModalViewController:是]
所有这些的一个附带好处是,电影播放器处理逻辑可以被丢弃在一个地方,并且很容易在应用程序中重用


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

我使用view.transform并更改视图框以填充屏幕的方法似乎工作得很好,我还没有让动画正常工作,我已经更改了播放控制样式并隐藏了状态栏。制作动画更复杂,因为我必须在旋转时增加正常屏幕的遮光,而且因为我的视频视图不在屏幕的中心,所以我必须做一些工作,使视图移动到中心的速度比旋转和填充屏幕的速度快,以改善外观,但这一切似乎都是可行的。