Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift AVPlayer视频不支持';t在设备旋转后调整大小_Swift_Uiview_Avplayer_Avplayerlayer - Fatal编程技术网

Swift AVPlayer视频不支持';t在设备旋转后调整大小

Swift AVPlayer视频不支持';t在设备旋转后调整大小,swift,uiview,avplayer,avplayerlayer,Swift,Uiview,Avplayer,Avplayerlayer,我试图使AVPlayer视频在设备旋转后始终全屏显示。这是我的完整代码。我不明白为什么视频没有调整大小。即使我使用像layerClass这样的子类。设备旋转后,视频视图被剪切,我看不到完整的视频。如果有人有主意。提前谢谢 import UIKit import AVKit import AVFoundation class ViewController: UIViewController { var player: AVPlayer? var videoView: Video

我试图使AVPlayer视频在设备旋转后始终全屏显示。这是我的完整代码。我不明白为什么视频没有调整大小。即使我使用像layerClass这样的子类。设备旋转后,视频视图被剪切,我看不到完整的视频。如果有人有主意。提前谢谢

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {

    var player: AVPlayer?
    var videoView: VideoContainerView!
    var playerLayer: AVPlayerLayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.videoView = VideoContainerView()
        self.videoView.frame = self.view.bounds
        self.videoView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

        let path = Bundle.main.path(forResource: "GAVIDEO", ofType: "mp4")
        self.player = AVPlayer(url: NSURL(fileURLWithPath: path!) as URL)
        self.player?.isMuted = true

        self.playerLayer = AVPlayerLayer(player: self.player)
        self.playerLayer.frame = self.videoView.bounds
        self.playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill

        self.videoView.layer.addSublayer(playerLayer)

        self.videoView.layer.masksToBounds = true

        self.view.addSubview(self.videoView)

        self.player?.play()
    }

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)

        self.videoView.frame = self.view.bounds
        self.playerLayer.frame = self.videoView.bounds

    }

}

class VideoContainerView: UIView {

    override class var layerClass: AnyClass {
        get {
            return AVPlayerLayer.self
        }
    }

    override func layoutSublayers(of layer: CALayer) {
        super.layoutSublayers(of: layer)
        guard layer == self.layer else {
            return
        }
        layer.frame = self.bounds
    }

}

尝试使用
视图中的
大小
,这样做:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
   super.viewWillTransition(to: size, with: coordinator)
    coordinator.animate(alongsideTransition: { (context) in
    }) { (context) in
        self.videoView.frame.size = size
        self.playerLayer.frame.size = size
    }
}

以下内容对我很有用,其中
vc
是对
avplayervewcontroller
的引用,其中包含要调整大小的
AVPlayer
视图

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
   super.viewWillTransition(to: size, with: coordinator)
   coordinator.animate(alongsideTransition: nil) { (context) in
      if size.height <= vc.view.bounds.height || size.width <= vc.view.bounds.width {
         vc.videoGravity = .resizeAspect
      }
      else {
         vc.videoGravity = .resizeAspectFill
      }
   }
}
override func viewWillTransition(到大小:CGSize,带协调器:UIViewControllerTransitionCoordinator){
super.viewWillTransition(到:大小,带:协调器)
协调器。在中设置动画(alongsideTransition:nil){(上下文)

如果size.height谢谢!似乎在后台工作。是的,因为当我旋转视频播放器时,会出现一个白色层…与新更新的代码一起工作非常好。非常感谢!问题是
viewWillTransition
太早了。想想看,View会转换。因此
边界
不是您以后想要的边界r过渡。