如何固定AVPlayerViewController的videoGravity为.resizeAspect禁止切换
固定AVPlayerViewController视频缩放模式方案
你记忆里的布尔开关是iOS 16+新增的showsZoomControls属性,直接设置为false即可同时隐藏缩放切换按钮、禁用双击切换缩放的系统手势,配合初始videoGravity设置就能完全锁死缩放模式:
let playerViewController = AVPlayerViewController() playerViewController.player = yourAVPlayerInstance // 设置默认缩放模式为等比适配 playerViewController.videoGravity = .resizeAspect // 禁用缩放切换能力 playerViewController.showsZoomControls = false
iOS 16以下版本兼容
低版本系统没有提供对应开关,不需要遍历子视图隐藏按钮或者自定义手势拦截,用KVO监听强制回写属性即可,能同时拦截按钮点击、双击触发的缩放切换,不影响其他播放控件正常使用:
// 初始化时设置默认缩放模式 playerViewController.videoGravity = .resizeAspect // 持有该监听对象避免提前释放 var gravityObservation: NSKeyValueObservation? gravityObservation = playerViewController.observe(\.videoGravity, options: .new) { vc, _ in guard vc.videoGravity != .resizeAspect else { return } // 只要检测到缩放模式被修改,立刻强制改回目标值 vc.videoGravity = .resizeAspect }
系统默认支持的两种视频缩放模式
.resizeAspect:等比缩放完整展示视频内容,视视频和屏幕比例差可能出现黑边.resizeAspectFill:等比缩放填满整个播放区域,可能裁剪视频边缘内容
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

