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

标签 iphone ios cocoa video mpmovieplayercontroller

我有一个要求,其中包含视频的界面仅为纵向,但当用户旋转为横向时,视频会进入全屏并开始播放,然后当视频播放结束或用户点击完成时,视频退出全屏,界面仍为纵向。我尝试使用 shouldAutorotateToInterfaceOrientation: 方法启动视频。但我无法让屏幕再次旋转回来。我决定改为使用 shouldAutorotateToInterfaceOrientation: 并创建我自己的 View Controller 来仅处理视频并使用 -[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
    }

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

最佳答案

我也被这个弄糊涂了......与设备和 View 旋转以及诸如此类的东西搏斗,甚至设法让事情大部分工作,但我不断地发现另外一个会破坏它(例如,用户在旋转时进出全屏,播放后神秘地丢失状态栏,等等)。

我希望您能按照您在此处建议的思路找到解决方案(我期待从中学习)。否则,你可以像我一样,以半败半败的方式夺取半胜:

  • 专为电影创建一个新的横向 View Controller 玩。只需通过回答即可实现横向定位 应该自动旋转到界面方向:
  • 从你正在处理的 VC 中找出所有丑陋的方向代码, 并简单地 presentModalViewController: 在新的上。 (你甚至可以 有一个很酷的免费过渡效果,比如垂直滑入)。
  • 在 viewDidAppear 时加载并播放电影
  • 在风景视频 VC 中,订阅 MPMoviePlayerPlaybackDidFinishNotification,通知时,做 [self dismissModalViewController:YES];

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

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

关于iphone - 当用户旋转到横向时全屏播放视频,然后在视频停止时以编程方式旋转回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900379/

相关文章:

objective-c - 如何摆脱 objective c typedef 中的可空性警告?

macos - 通过 NSService 接收 URL,拖放到应用程序图标或 NSView : how to determine if it's already in sandbox?

objective-c - 可拖动的 NSWindow 闪烁

iphone - Facebook SDK 集成 - 使用 View Controller 而不是应用程序委托(delegate)

iphone - 从 Nib 问题加载自定义单元格

javascript - React Native 错误找不到模块 'metro-config/src/defaults/blacklist'

ios - 修复 SwiftUI 表单中奇怪的 DatePicker 动画行为

iphone - popViewController 不会自动旋转回允许的方向

ios - 将 subview 添加到选定的表格 View 单元格

ios - 在 Tabbar 内容 ViewController 之前添加登录 View