iOS画中画
iOS 14 画中画
打开项目后台模式

创建视频播放源
let url = Bundle.main.url(forResource: "annie", withExtension: "mp4")!
avPlayerItem = AVPlayerItem(url: url)
avPlayer = AVPlayer(playerItem: avPlayerItem)
avPlayerLayer = AVPlayerLayer(player: avPlayer)
avPlayerLayer?.frame = CGRectMake(0, 0, hgScreenW, hgScreenH - 200)
view.layer.addSublayer(avPlayerLayer!)
检查是否支持
AVPictureInPictureController.isPictureInPictureSupported()
导入 AVKit 创建 AVPictureInPictureController,并设置代理
import AVKit
if AVPictureInPictureController.isPictureInPictureSupported() {
do {
let session = AVAudioSession.sharedInstance()
try session.setCategory(.playback)
try session.setActive(true)
} catch {}
self.pipViewController = AVPictureInPictureController(playerLayer: self.avPlayerLayer!)
self.pipViewController?.delegate = self
}
代理方法包括
func pictureInPictureControllerWillStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
print("画中画将要开始")
}
func pictureInPictureControllerDidStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
print("画中画已经开始")
}
func pictureInPictureControllerWillStopPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
print("画中画将要停止")
}
func pictureInPictureControllerDidStopPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
print("画中画已经停止")
}
func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, failedToStartPictureInPictureWithError error: Error) {
print("画中画开始失败:\(error.localizedDescription)")
}
func pictureInPictureController(_ pictureInPictureController: AVPictureInPictureController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) {
print("恢复播放界面")
}
开启画中画
手动开启和结束
self.avPlayer?.play()
if AVPictureInPictureController.isPictureInPictureSupported(){
self.pipViewController?.startPictureInPicture()
self.pipViewController?.stopPictureInPicture()
}
在 pictureInPictureControllerDidStopPictureInPicture 代理方法中可以处理关闭画中画后的视频
非手动开启
点击播放的时候不手动开启,播放后返回桌面
iOS画中画的更多相关文章
- iOS当中一些常见的面试题
转自各方面..... 一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.iOS9有哪些新特性? 答案: 1)改进了 Siri 基于日期.位置和相簿名称来搜索个人照片和视 ...
- iOS 9正式版开始推送 升级机型非常广泛
北京时间今日零时,苹果正式推送了iOS9,对于iPhone和iPad来说这一版系统升级都有很多重要改进,而升级的机型也非常宽泛,甚至连2011年的iPad 2与iPhone 4s都获得了支持,所以广大 ...
- iOS开发-定制多样式二维码
iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常 ...
- iOS 1 到 iOS 10 ,我都快老了
iOS 1:iPhone诞生 虽然很难想像,但初代iPhone在问世时在功能方面其实远远落后于那时的竞争对手,比如Windows Mobile.Palm OS.塞班.甚至是黑莓.它不支持3G.多任务. ...
- iOS SDK Release Notes for iOS 9 iOS9 SDK 版本更新说明
Important: This is a preliminary document for an API or technology in development. Apple is supplyin ...
- iOS - AVPlayer 音视频播放
前言 NS_CLASS_AVAILABLE(10_7, 4_0) @interface AVPlayer : NSObject @available(iOS 4.0, *) public class ...
- iOS开发——新特性OC篇&IOS9 系统新特性
IOS9 系统新特性 2015年6月89号凌晨召开的WWDC 2015苹果开发者大会发布了全新的iOS 9系统,PC6小编今天给大家整理了这次iOS9的系统更新带来了哪些新的功能与升级,本次新功能一览 ...
- iOS开发——新特性OC篇&IOS9 SDK新特性
iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍 ...
- ios面试题集锦(一)
一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.iOS9有哪些新特性? 答案: 1)改进了 Siri 基于日期.位置和相簿名称来搜索个人照片和视频 要求 Siri 来 ...
- iOS 9之分屏多任务(Split View)
金田(github 示例源码) 多任务(multitasking)算是iOS9中最引人瞩目的核心新特性了,之前越狱版用户就用过类似的插件,微软的 苏菲 (Windows Surface)系列也有分屏多 ...
随机推荐
- PHP面试,拼团
如何设计数据库模型来支持拼团功能? 答案:拼团功能涉及到多个用户参与同一团的情况,可以设计以下表结构: Product 表: 存储商品信息,包括商品ID.名称.价格等字段. Group 表: 存储拼团 ...
- /proc/zoneinfo
root@pita2_mr813_tina35:/# cat /proc/zoneinfo Node 0, zone DMA per-node stats nr_inactive_anon 4749 ...
- Java日期时间API系列40-----中文语句中的时间语义识别(time NLP)代码实现分析
从上篇 Java日期时间API系列39-----中文语句中的时间语义识别(time NLP 输入一句话,能识别出话里的时间)原理分析 中得知解析的主要步骤分为三步: (1)加载正则文件 (2)解析中文 ...
- DBA面试资源合集(含Oracle、MySQL、Redis等)-墨天轮
如今正值金九银十招聘季,众多企业开放大批岗位等待新力量的注入,各位DBA们,你们是否正在激情备战中? 作为企业数据化进程中十分重要的一环,DBA的职责越来越重要,作为高薪资岗位之一,应聘DBA的竞争也 ...
- dotnet 委托delegate的使用 定义和使用
void Main() { // 委托 - 初级和高级的分水岭 // 1. 委托的初体验 // 委托是一个引用类型,其实是一个类型,保存方法的指针(地址) (变量名字都是地址 都是指针) // 是一个 ...
- tekton初次安装报错“containers with incomplete status: [place-tools]”
报错内容 在按照官方部署方式部署完毕以后,执行第一个taskrun的时候就报错了,报错如下 Status: Conditions: Last Transition Time: 2022-08-08T0 ...
- HDU-ACM 2024 Day4
T1001 超维攻坚(HDU 7469) 三维凸包,不会. T1002 黑白边游戏(HDU 7470) 显然这道题没有一个固定的最优策略,所以只能 \(\text{dp}\) 决策. 可以倒着做,设 ...
- Effective C++:以const、enum和inline来替换define
替换define,也就是"以编译器替换预处理器".#define是C语言里的利器,但在C++里有很多取代它的理由. define是预处理的一部分,而不是编译器的一部分,它在编译前就 ...
- vue 下载文件并且重命名
<el-button type="primary" @click="xz(scope.row)" size="small">下载 ...
- 1000%增长!我仅用一个小时搞定!AI智能体+AI小程序=MVP王炸组合!
前言 在万圣节的前一晚上10月30日,一位运营朋友跟我说了个点子万圣节头像生成器,然后大概给我分析了下整体思路,于是我用扣子Coze平台(coze.cn)搭建了一个AI智能体整个过程花了一个小时就搞定 ...