如何修改AVPictureInPictureController的快进快退时间值?
修改AVPictureInPictureController快进快退步长为10秒
系统默认的PiP模式快进/快退步长是15秒,Apple目前没有提供直接修改该值的公开API,但可以通过拦截远程控制事件并手动执行自定义步长的seek操作来实现需求:
让视图控制器支持接收远程控制事件
重写视图控制器的生命周期方法,完成远程控制事件的注册/注销,并确保控制器能成为第一响应者:override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIApplication.shared.beginReceivingRemoteControlEvents() becomeFirstResponder() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) UIApplication.shared.endReceivingRemoteControlEvents() resignFirstResponder() } override var canBecomeFirstResponder: Bool { return true }拦截并处理快进/快退事件
重写remoteControlReceived(with:)方法,捕获系统的快进快退事件,替换为自定义的10秒步长seek操作:override func remoteControlReceived(with event: UIEvent?) { guard let event = event, event.type == .remoteControl else { return } guard let player = playerViewController?.player else { return } let customStep: TimeInterval = 10 // 自定义步长为10秒 switch event.subtype { case .remoteControlEndSeekingForward: let targetTime = CMTimeGetSeconds(player.currentTime()) + customStep player.seek(to: CMTime(seconds: targetTime, preferredTimescale: 1)) case .remoteControlEndSeekingBackward: let targetTime = max(CMTimeGetSeconds(player.currentTime()) - customStep, 0) player.seek(to: CMTime(seconds: targetTime, preferredTimescale: 1)) default: super.remoteControlReceived(with: event) } }
注意事项
- 确保你的
AVPlayerViewController已开启PiP支持:playerViewController.allowsPictureInPicturePlayback = true - 如果需要处理长按按钮的连续快进/快退,可以监听
.remoteControlBeginSeekingForward和.remoteControlBeginSeekingBackward事件,通过定时器持续调整播放位置
内容的提问来源于stack exchange,提问作者Yulia
相关产品推荐
相关产品推荐

