简体   繁体   中英

How to prevent videoGravity changes in AVPlayerViewController

My memory is not working for me right now. I think I remember there was a way to prevent the video interface of AVPlayerViewController (or similar) from having the button which allows user to toggle between videoGravity settings, I think those are basically two;

  • .resizeAspect
  • .resizeAspectFill

User can also double tap on screen to toggle between these two.

What I'd like to do is force the video of a AVPlayerViewController to only use . .resizeAspect for .videoGravity . I think I remember there should be a way to do this with an easy boolean toggle somewhere, but cannot find it searching for 15 minutes.

Here's a very dirty way I was able to hide the button. Unfortunately, user can still use gestures (double tap, pinch) to zoom the video. The proper thing to do is a full custom view it seems.

eg

extension UIView {
    
    var recursiveSubviews: [UIView] {
        return subviews + subviews.flatMap { $0.recursiveSubviews }
    }
}
class CustomPlayerViewController: AVPlayerViewController {
    
    private func hideZoom() {
        let zoomButton = view.recursiveSubviews.first(where: { $0.accessibilityLabel == "Zoom" })
        zoomButton?.superview?.removeFromSuperview()
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        hideZoom()
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM