【问题标题】:Rotating an avplayer video?旋转 avplayer 视频?
【发布时间】:2015-12-18 07:30:46
【问题描述】:

正如问题所述,是否有任何方法可以在 avplayer 中旋转视频。

目前,我正在以模态方式展示一个作为 avplayercontroller 实例的类。整个应用程序仅在纵向模式下运行,但我希望以横向模式播放此视频。

我已经尝试过这里列出的“shouldAutorotate”和其他方法: Only ONE VIEW landscape mode

Swift 似乎不喜欢让模态呈现的视图控制器具有不同的方向。

我的视频控制器类的代码

import UIKit
import AVFoundation
import AVKit

class streamStuffViewController: AVPlayerViewController {

     var isPresented = true

    override func viewDidLoad() {
        super.viewDidLoad()

        self.player = AVPlayer(URL: NSURL(string: currentStream))
        self.player.play()


        // Do any additional setup after loading the view.
    }


    override func viewWillDisappear(animated: Bool) {

    }



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewDidDisappear(animated: Bool) {
        self.player.pause()
    }


}

【问题讨论】:

  • @RaymondRangel,您找到解决方案了吗?

标签: ios objective-c swift


【解决方案1】:

不久前我也遇到了同样的情况。我也试图只改变一个屏幕的方向,我用我添加的 hack 做到了 self.view.transform = CGAffineTransformMakeRotation(1.5708)viewDidLoad() 中的这一行用于旋转整个视图。但您仍然会在纵向模式下看到运营商和电池符号。

【讨论】:

    【解决方案2】:
    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        if let navigationController = self.window?.rootViewController as? UINavigationController {
            if navigationController.visibleViewController is PlayVideoViewController {
                return UIInterfaceOrientationMask.all
            } else {
                return UIInterfaceOrientationMask.portrait
            }
        }
        return UIInterfaceOrientationMask.portrait
    }
    

    如果您的应用程序仅在 potrait 模式下工作,但您只希望 avplayer 旋转,则将此代码添加到 AppDelegate.swift 文件并将“PlayVideoViewController”替换为您的 ControllerName。

    【讨论】:

      【解决方案3】:

      我正在听方向变化:

      // view did load
      NotificationCenter.default.addObserver(self, selector: #selector(deviceOrientationDidChange), name: .UIDeviceOrientationDidChange, object: nil)
      

      然后我旋转视频播放器,但仅在我的场景中向左/向右横向:

      @objc func deviceOrientationDidChange() {          
        switch UIDevice.current.orientation {
        case .faceUp, .faceDown, .portrait, .unknown, .portraitUpsideDown:
          // default the player to original rotation
          self.playerController.view.transform = .identity 
          self.playerController.view.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
      
        case .landscapeLeft:
          self.playerController.view.transform = CGAffineTransform(rotationAngle: CGFloat((90 * Double.pi)/180))
          self.playerController.view.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
      
        case .landscapeRight:
          self.playerController.view.transform = CGAffineTransform(rotationAngle: CGFloat((-90 * Double.pi)/180))
          self.playerController.view.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
        }
      }
      

      如果您喜欢动画,可以将该代码封装在 UIView.animate 中。

      别忘了在deinit()上拨打NotificationCenter.default.removeObserver(self)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多