iOS 14 自定义画中画悬浮窗 Custom AVPictureInPictureController 实现方案
iOS 14,基于 AVPictureInPictureController,实现自定义画中画,涵盖所有功能与难点。
市面上的各种悬浮钟和提词器的原理都是基于此。
Demo源码在文末。
使用 iOS 画中画的要求:
- 真机,不能使用模拟器;
- iOS 14 及以上;
- 开启后台模式:
技术点:
- 添加任意 view 到画中画窗口;
- 按需隐藏系统的快进快退按钮、播放按钮、进度条;
- 用代码动态修改画中画窗口的形状,横向、竖向 or 方形;
- 用代码旋转画中画窗口;
- 基于常驻线程的线程保活措施,让你的画中画永不停歇;
- 拍照和录视频不会中断画中画;
- 拍摄视频画中画的 timer 也不会停止;
- 高精度 timer;
- 用代码控制进入后台自动开启画中画;
- 如何应对苹果的审核。
演示视频:
核心功能:
1. 如何添加自定义 view 到画中画窗口?
func pictureInPictureControllerWillStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {// note this is first windowif let window = UIApplication.shared.windows.first {window.addSubview(customView)// use autoLayoutcustomView.snp.makeConstraints { (make) -> Void inmake.edges.equalToSuperview()}}
}
2. 如何隐藏系统的快进快退按钮、播放按钮、进度条?
pipController.setValue(1, forKey: "controlsStyle")
3. 如何用代码动态修改窗口的形状?
窗口的形状由视频的形状决定。
4. 如何用代码旋转窗口?
详见demo源码。
5. 如何在录视频时不暗屏?
详见demo源码。
6. 如何让画中画在后台一直运行?
播放无声音频。
7. 如何进入后台时自动开启画中画?
AVPictuerInPictureController
提供了一个属性:
if #available(iOS 14.2, *) {pipController.canStartPictureInPictureAutomaticallyFromInline = true
} else {// Fallback on earlier versions
}
注:播放器必须处于播放状态。
8. 如何监听画中画窗口变大变小?
KVO,监听画中画里view大小的变化;或者直接在 layoutSubviews
方法里处理。
9. 如何在画中画开启时,让 app 自动进入后台?
调用下面方法:
UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)
10. 如何提升悬浮秒表的精度?
使用 GCD Timer。
最后,如何应对苹果的审核?
苹果可能会因为你使用了后台权限而拒绝你。
可能是因为它没看到你使用了画中画功能,录屏告诉它你使用了画中画,画中画必须依赖 Background Mode.
如果这样还不行,在你的 App 里添加视频播放功能,顺带开启视频播放器的画中画功能,有了能开启画中画的视频播放器,你就可以理所当然的使用 Background Mode 了。
如何快速添加视频播放功能?用 iOS 自带的视频播放器 class 啊。
也可以用一个 web,在 web 里放视频播放器。
视频播放器放什么?实在不知道放什么就放你们产品的画中画使用教程吧。
引申出的骚操作:如何给让 App 可以一直在后台运行?
问:如何让你开发的 App 可以一直在后台运行?
答:后台放无声音频就阔以咯。
问:后台放无声音频需要 Background Mode,审核阔能不通过。
答:给你的 App 一个可以正当使用 Background Mode 的理由,比如说视频播放,比如说画中画。
Demo源码:
GitHub - CaiWanFeng/PiP: The best way to customize picture-in-picture for iOS.The best way to customize picture-in-picture for iOS. - GitHub - CaiWanFeng/PiP: The best way to customize picture-in-picture for iOS.https://github.com/CaiWanFeng/PiP
iOS 14 自定义画中画悬浮窗 Custom AVPictureInPictureController 实现方案相关推荐
- uniapp 画中画悬浮窗(视频) Ba-VideoPip
简介(下载地址) Ba-VideoPip 是一款画中画方式的视频悬浮窗插件.支持点播.直播:支持官方.三方播放器无缝切换:支持动态刷新(如切换视频或进度). 支持点播.直播 支持官方.三方播放器无缝切 ...
- iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...
iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...
- ios居然自带悬浮窗调试工具
我们经常使用各种调试工具,或者开源库来支持悬浮窗调试信息,但苹果的私有方法就提供了UIDebuggingInformationOverlay. 系统要求: ios10+,iOS11 目前在我自己的手 ...
- android 仿ios悬浮窗,iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...
iOS精选源码 iOS优质博客 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删)1. Object-c的类可以多重继承 ...
- Android开发笔记(一百一十八)自定义悬浮窗
WindowManager 在前面< Android开发笔记(六十六)自定义对话框>中,我们提到每个页面都是一个Window窗口,许多的Window对象需要一个管家来打理,这个管家我们称之 ...
- 悬浮窗播放器html,Chrome扩展插件悬浮画中画播放器推荐
今天给大家安利一个 Chrome 扩展插件,可将绝大多数的 HTML 5 直播或视频通过画中画悬浮窗的的形式播放,特别适合一边看视频一边工作.插件名称叫:[悬浮画中画播放器] 插件使用方法: 插件使用 ...
- 移动自定义悬浮窗(图片)
对于自定义悬浮窗的移动,首先是有自定义悬浮窗的xml文件,其中最关键的是设置监听事件,然后重写监听事件即可.具体如代码所示: 对于应用在系统的悬浮窗权限需要在manifest中声明: <uses ...
- 苹果屏幕自动变暗_苹果iOS 14震撼发布 全新功能对标安卓
今天凌晨1点,苹果WWDC 2020开发者大会正式召开,在这次开发者大会上,苹果为我们带来了不少新玩意,接下来就跟随我们的脚步一起看看吧. iOS 14 三个便捷新功能iOS 14是本次WWDC上的一 ...
- uniapp 来电显示悬浮窗插件(支持锁屏来电) Ba-CallerID
简介(下载地址) Ba-CallerID 是一款来电显示悬浮窗插件插件. 支持显示.隐藏 支持锁屏来电显示 支持自定义位置显示(上.中.下) 支持拖动(这版不支持,需要的话可以加) 支持申请.判断悬浮 ...
最新文章
- 阿里2018营收2502亿元,云计算业务增幅超100%
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
- mac git命令按tab键自动补全
- python php linux-怎么在linux上运行python
- 头像裁剪上传插件php,PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
- [WPF]程序随系统自启动
- mysql数据库表的类型介绍,mysql数据库表的类型介绍
- 【QA5】【mysql问题】ERROR 1045 (28000): Access denied for...
- 关于跳转 + 传递消息,
- linux kali局域网远程桌面,kali使用rdesktop连接Windows远程桌面
- WebLogic的安装步骤及部署
- 2016款MACBOOK PRO触控条版 安装WIN10初体验 及 无奈退货记
- 爬虫--Item Pipeline 介绍(21)
- java 级联删除_JPA级联删除
- Golang 协程顺序打印
- 论文MGN笔记《Learning Discriminative Features with Multiple Granularities for Person Re-Identification》
- WebP_支持:超乎你想象
- Google 黑客搜索技巧
- 太空人esp32/8266天气时钟学习经验
- mac $php_autoconf,开发者说PHPersay-Mac安装Swoole扩展phpize 时 Cannot find autoconf 解决方法...
热门文章
- python:画无角正方形(效果图+源码)
- linux如何创建快捷,如何在Linux的桌面上创建快捷方式或启动器
- [中国评书论坛] 社区登陆
- Parameter 0 of method modifyRequestBodyGatewayFilterFactory....真正的解决办法!!!!!
- 光模块介绍-光纤通信核心器件
- 【JVM】JVM监控
- vue连线 插件_基于vue的网页标尺辅助线工具(vue-ruler-tool)
- python各库的官方文档(涉及各函数、参数的使用)(pandas、numpy、sklearn)
- 微信小程序入门:在小程序中播放视频和发送弹幕
- 基于java+SpringBoot+vue+B/S的酒店管理系统设计与实现【源码+论文+演示视频+包运行成功】