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. 【Pandas库】(1) Series的创建方法
  2. [转]css选择器优先级深入理解
  3. pyav Invalid data found when processing input (libav.h264: no frame!)
  4. Oracle 查看sql语句执行计划方法
  5. html 中表格长度固定
  6. PHP浮点运算结果出现误差原因分析及解决方案
  7. java guava_java项目中使用guava的工具包的心得
  8. DFA和NFA的区别
  9. 32 位的有符号整数_「js基础」JavaScript逻辑和位运算符归纳
  10. 【PHP】Ajax跨域解决方案 、jsonp、cors
  11. Python 集合 day3
  12. 常见SMTP发送失败原因列表
  13. IAR模板--怎样在IARproject中创建和使用模板
  14. (已更新)视频app小程序模板源码
  15. WordPress插件 AffiliateWP 电商联盟推广插件汉化/中文版[更新至v1.8]
  16. visio2016无法安装的完美解决方法
  17. dep指定版本 go_Golang官方依赖管理工具:dep
  18. 米勒拉宾素性检验(代码模板)
  19. 立秋养生,老话说“三不吃、三不做、三不睡”,精神饱满健康过秋
  20. WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建

热门文章

  1. position定位的基准问题
  2. 在抖音推荐算法组工作的体验怎么样?
  3. VOIP—软交换系统
  4. (五)SQLite数据存储与读取
  5. (gcd,lcm,互质) 康纳的表情包--SDUT,Wolf and Rabbit--HDOJ
  6. VC的一个屏保例子(MFC)
  7. centOS压缩和解压命令之bz2
  8. 使用scp局域网内传输文件速度很慢的原因排查
  9. uView的NoticeBar 滚动通知自带的bug之获取不到click的索引
  10. HTML第二章 “表格”详解 (附带详细代码与解释)!!!