iOS:处理方向更改而不在View Controller上启用横向模式

时间:2018-04-22 00:01:37

标签: ios swift uiinterfaceorientation

我的Swift应用程序的视图控制器始终固定为纵向模式,但视图控制器有一个嵌入式AV视频播放器(添加为子视图控制器),应该切换到全屏模式,设备方向更改为景观。

我面临的问题是,如果我未在View Controller上启用横向模式,我将无法检测到方向更改(尝试使用NSNotification.Name.UIApplicationDidChangeStatusBarOrientationNSNotification.Name.UIDeviceOrientationDidChange)&因此无法触发播放器全屏。

我希望我的视图控制器 对方向更改做出反应,因为它会导致我的自动布局视图拉伸并适应屏幕尺寸变化,但同时我希望方向更改能够到达子视图控制器,即视频播放器,以便它可以处理全屏模式/内联模式之间的切换。

if let playerVC = createPlayerViewController() as? (UIViewController & MyEmbedPlayer) {

    // Set up events delegate.
    self.playerViewController = playerVC
    self.playerViewController?.setEventsDelegate(self)

    // PlayerViewController added as child of View Controller
    self.addChildViewController(self.playerViewController!)
}

let managedPlayerView = self.playerViewController?.view
managedPlayerView?.removeFromSuperview()
managedPlayerView?.frame = self.playerView.bounds
managedPlayerView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]

playerView.addSubview(managedPlayerView!)

self.playerViewController?.didMove(toParentViewController: self)
self.playerViewController?.setVideoURL(streamURL)

TL; DR:我不希望我的屏幕元素对方向更改做出反应,但仍希望我的子视图控制器接收方向更改事件。

1 个答案:

答案 0 :(得分:0)

试试这段代码

 let myAVPlayerViewController = MYAVPlayerViewController()
        myAVPlayerViewController.player = player
        self.present(myAVPlayerViewController, animated: true) { 
            self.player.play()

        }

在你的控制器中调用

{{1}}
  

注意:请确保检查只是肖像一般 - >设备   取向