问题:采用pip画中画技术开发,在pip画中画中放入自定义视图,文案写入视图中并设定滚动,达到悬浮窗显示文案滚动效果(已开发实现),但是当打开手机相机准备拍摄时,画中画停止播放,文案就消失了。停止播放是系统层面的拦截,但我希望自定义视图不要消失,并且还能滚动。应用市场有很多提词器应用都实现了这个效果,我想知道技术上是如何实现的?
3条回答 默认 最新
阿里嘎多学长 2025-03-25 20:41关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
解决方案
iOS端实现pip画中画在打开相机拍摄时还能继续播放,可以使用
AVCaptureVideoPreviewLayer的setVideoGravity方法设置视频预览层的填充模式为.resizeAspectFill,这样可以使视频预览层填充整个屏幕,并且可以继续播放视频。在你当前的实现中,你可以在打开相机拍摄时,暂停pip画中画的播放,然后在相机拍摄完成后恢复播放。
以下是一个示例代码:
import AVFoundation // ... // 设置视频预览层的填充模式 videoPreviewLayer.videoGravity = .resizeAspectFill // ... // 打开相机拍摄时暂停pip画中画的播放 func startCameraCapture() { // ... videoPlayer.pause() } // 相机拍摄完成后恢复pip画中画的播放 func stopCameraCapture() { // ... videoPlayer.play() }在上面的代码中,我们使用
AVCaptureVideoPreviewLayer的setVideoGravity方法设置视频预览层的填充模式为.resizeAspectFill,这样可以使视频预览层填充整个屏幕,并且可以继续播放视频。在
startCameraCapture方法中,我们暂停pip画中画的播放,以便在相机拍摄完成后恢复播放。在
stopCameraCapture方法中,我们恢复pip画中画的播放,以便继续播放视频。代码核心部分
videoPreviewLayer.videoGravity = .resizeAspectFill重要提示
在使用
AVCaptureVideoPreviewLayer时,需要确保你已经获取了相机权限,并且已经设置了视频预览层的frame。解决 无用评论 打赏 举报