如何禁用AVPlayerView响应暂停⏯️键自动暂停视频的功能
解决方案
AVPlayerView 没有公开的配置属性可以直接关闭媒体按键的默认响应,要屏蔽⏯️按键触发自动暂停/播放的行为,子类化AVPlayerView拦截对应按键事件即可,实现步骤如下:
- 新建AVPlayerView的自定义子类,重写按键事件处理方法,拦截播放暂停键,不要把事件传给父类触发默认逻辑:
import AppKit import AVKit class KeyInterceptedPlayerView: AVPlayerView { override func keyDown(with event: NSEvent) { // 苹果键盘上⏯️播放/暂停媒体键对应的键码为16 if event.keyCode == 16 { // 这里可以写你自己需要的按键响应逻辑,不需要额外处理直接return即可 return } // 如果不需要保留其他按键的默认响应,直接删掉下面这行super调用即可 super.keyDown(with: event) } // 部署目标为macOS 10.15+时建议加上这个方法,适配新的事件传递机制 override func pressesBegan(_ presses: Set<NSPress>, with event: NSPressesEvent?) { for press in presses { if press.key?.keyCode == 16 { return } } super.pressesBegan(presses, with: event) } }
- 替换原有代码中AVPlayerView的相关声明和初始化逻辑,使用上面自定义的子类:
// 替换原有的AVPlayerView属性声明 private var video_player_view: KeyInterceptedPlayerView // 替换init方法里的初始化代码 self.video_player_view = KeyInterceptedPlayerView()
补充说明
- 如果需要同时屏蔽其他媒体按键,可以在判断条件中追加对应键码:上一曲键码19、下一曲键码20
- 拦截生效的核心是:被屏蔽的按键不要调用父类的事件处理方法,否则AVPlayerView内置的播放控制逻辑还是会触发
- 你当前代码已经将
controlsStyle设置为.none,不会显示原生播放控件,搭配上面的按键拦截后,就不会出现按键触发自动暂停的问题
内容的提问来源于stack exchange,提问作者user10802841
相关产品推荐
相关产品推荐

