iOS 14,基于 AVPictureInPictureController,实现自定义画中画,涵盖所有功能与难点。

市面上的各种悬浮钟和提词器的原理都是基于此。

Demo源码在文末。

使用 iOS 画中画的要求:

  1. 真机,不能使用模拟器;
  2. iOS 14 及以上;
  3. 开启后台模式:

技术点:​​​​​​​

  1. 添加任意 view 到画中画窗口;
  2. 按需隐藏系统的快进快退按钮、播放按钮、进度条;
  3. 用代码动态修改画中画窗口的形状,横向、竖向 or 方形;
  4. 用代码旋转画中画窗口;
  5. 基于常驻线程的线程保活措施,让你的画中画永不停歇;
  6. 拍照和录视频不会中断画中画;
  7. 拍摄视频画中画的 timer 也不会停止;
  8. 高精度 timer;
  9. 用代码控制进入后台自动开启画中画;
  10. 如何应对苹果的审核。

演示视频:

核心功能:

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 实现方案相关推荐

  1. uniapp 画中画悬浮窗(视频) Ba-VideoPip

    简介(下载地址) Ba-VideoPip 是一款画中画方式的视频悬浮窗插件.支持点播.直播:支持官方.三方播放器无缝切换:支持动态刷新(如切换视频或进度). 支持点播.直播 支持官方.三方播放器无缝切 ...

  2. iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...

    iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...

  3. ios居然自带悬浮窗调试工具

    我们经常使用各种调试工具,或者开源库来支持悬浮窗调试信息,但苹果的私有方法就提供了UIDebuggingInformationOverlay. 系统要求:  ios10+,iOS11 目前在我自己的手 ...

  4. android 仿ios悬浮窗,iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...

    iOS精选源码 iOS优质博客 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删)1. Object-c的类可以多重继承 ...

  5. Android开发笔记(一百一十八)自定义悬浮窗

    WindowManager 在前面< Android开发笔记(六十六)自定义对话框>中,我们提到每个页面都是一个Window窗口,许多的Window对象需要一个管家来打理,这个管家我们称之 ...

  6. 悬浮窗播放器html,Chrome扩展插件悬浮画中画播放器推荐

    今天给大家安利一个 Chrome 扩展插件,可将绝大多数的 HTML 5 直播或视频通过画中画悬浮窗的的形式播放,特别适合一边看视频一边工作.插件名称叫:[悬浮画中画播放器] 插件使用方法: 插件使用 ...

  7. 移动自定义悬浮窗(图片)

    对于自定义悬浮窗的移动,首先是有自定义悬浮窗的xml文件,其中最关键的是设置监听事件,然后重写监听事件即可.具体如代码所示: 对于应用在系统的悬浮窗权限需要在manifest中声明: <uses ...

  8. 苹果屏幕自动变暗_苹果iOS 14震撼发布 全新功能对标安卓

    今天凌晨1点,苹果WWDC 2020开发者大会正式召开,在这次开发者大会上,苹果为我们带来了不少新玩意,接下来就跟随我们的脚步一起看看吧. iOS 14 三个便捷新功能iOS 14是本次WWDC上的一 ...

  9. uniapp 来电显示悬浮窗插件(支持锁屏来电) Ba-CallerID

    简介(下载地址) Ba-CallerID 是一款来电显示悬浮窗插件插件. 支持显示.隐藏 支持锁屏来电显示 支持自定义位置显示(上.中.下) 支持拖动(这版不支持,需要的话可以加) 支持申请.判断悬浮 ...

最新文章

  1. 阿里2018营收2502亿元,云计算业务增幅超100%
  2. MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
  3. mac git命令按tab键自动补全
  4. python php linux-怎么在linux上运行python
  5. 头像裁剪上传插件php,PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
  6. [WPF]程序随系统自启动
  7. mysql数据库表的类型介绍,mysql数据库表的类型介绍
  8. 【QA5】【mysql问题】ERROR 1045 (28000): Access denied for...
  9. 关于跳转 + 传递消息,
  10. linux kali局域网远程桌面,kali使用rdesktop连接Windows远程桌面
  11. WebLogic的安装步骤及部署
  12. 2016款MACBOOK PRO触控条版 安装WIN10初体验 及 无奈退货记
  13. 爬虫--Item Pipeline 介绍(21)
  14. java 级联删除_JPA级联删除
  15. Golang 协程顺序打印
  16. 论文MGN笔记《Learning Discriminative Features with Multiple Granularities for Person Re-Identification》
  17. WebP_支持:超乎你想象
  18. Google 黑客搜索技巧
  19. 太空人esp32/8266天气时钟学习经验
  20. mac $php_autoconf,开发者说PHPersay-Mac安装Swoole扩展phpize 时 Cannot find autoconf 解决方法...

热门文章

  1. python:画无角正方形(效果图+源码)
  2. linux如何创建快捷,如何在Linux的桌面上创建快捷方式或启动器
  3. [中国评书论坛] 社区登陆
  4. Parameter 0 of method modifyRequestBodyGatewayFilterFactory....真正的解决办法!!!!!
  5. 光模块介绍-光纤通信核心器件
  6. 【JVM】JVM监控
  7. vue连线 插件_基于vue的网页标尺辅助线工具(vue-ruler-tool)
  8. python各库的官方文档(涉及各函数、参数的使用)(pandas、numpy、sklearn)
  9. 微信小程序入门:在小程序中播放视频和发送弹幕
  10. 基于java+SpringBoot+vue+B/S的酒店管理系统设计与实现【源码+论文+演示视频+包运行成功】