【问题标题】:Playing video in full screen when user rotates to landscape and then programmatically rotating back when video stops当用户旋转到横向时全屏播放视频,然后在视频停止时以编程方式旋转回来
【发布时间】:2012-03-28 13:48:00
【问题描述】:

我有一个要求,其中包含视频的界面仅是纵向的,但是当用户旋转到横向时,视频会进入全屏并开始播放,然后当视频到达结尾或用户点击完成时,视频退出全屏,界面仍然是纵向的。我尝试使用 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
    }

任何人都可以提供任何建议,我现在认为我应该实现自己的全屏转换以使其正常工作,但我想我会先得到一些反馈。

【问题讨论】:

    标签: iphone ios cocoa video mpmovieplayercontroller


    【解决方案1】:

    我也对此感到困惑......与设备和视图旋转等等搏斗,甚至设法让大部分工作正常,但我不断发现另一个案例破坏它(例如,用户在旋转时进出全屏,播放后神秘地丢失状态栏,等等)。

    我希望您可以按照您在此处提出的建议找到解决方案(我期待从中学习)。否则,你可以像我做的那样,从半失败的嘴巴中夺取半胜利如下:

    • 为电影创建一个新的仅横向视图控制器 玩。只需回答即可允许横向 shouldAutorotateToInterfaceOrientation:
    • 从你正在处理的 VC 中挖掘出所有丑陋的方向代码, 并简单地在新的上展示ModalViewController:。 (你甚至可以 具有很酷的免费赠品过渡效果,例如垂直滑入)。
    • viewDidAppear 时加载和播放影片
    • 在横向视频VC中,订阅 MPMoviePlayerPlaybackDidFinishNotification,在通知时,做 [self dismissModalViewController:YES];

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

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

    【讨论】:

    • 我使用 view.transform 并更改视图框架以填充屏幕的方法似乎效果很好,我还没有让动画正常工作,我已经更改了播放控制样式以及隐藏状态栏。动画它更复杂,因为我必须在旋转时添加正常屏幕的黑化,而且因为我的视频视图不在屏幕中心,我将不得不做一些工作才能让视图移动到中心的速度比屏幕的旋转和填充速度更快,以改善外观,但这一切似乎都是可行的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多