ios(swiftui) 画中画

 一、环境

要实现画中画 ios系统必须是 iOS14+

本文开发环境

xcode14.2

二、权限配置

  1. 在项目导航器中单击项目,然后单击Signing & Capabilities
  2. 单击 + Capabilit
  3. 搜索Background Modes,然后双击将其添加为功能。
  4. 在新添加的Background Modes部分,选中Audio, AirPlay, and Picture in Picture复选框。

三、实例

import Foundation
import SwiftUI
import AVKit
struct VideoPlayerView: UIViewControllerRepresentable {var videoURL: URL?// 创建UIViewControllerfunc makeUIViewController(context: Context) -> AVPlayerViewController {let controller = AVPlayerViewController()controller.player = AVPlayer(url: videoURL!)controller.allowsPictureInPicturePlayback = truecontroller.delegate = context.coordinatorreturn controller}// 更新UIViewControllerfunc updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {uiViewController.player = AVPlayer(url: videoURL!)uiViewController.allowsPictureInPicturePlayback = trueuiViewController.showsPlaybackControls = true // 显示控制层if #available(iOS 14.2, *) {//进入后台时是否自动打开
//               uiViewController.canStartPictureInPictureAutomaticallyFromInline = true} else {// Fallback on earlier versions}}func makeCoordinator() -> Coordinator {Coordinator(self)}class Coordinator: NSObject, AVPlayerViewControllerDelegate {var playerView: VideoPlayerViewinit(_ playerView: VideoPlayerView) {self.playerView = playerView}func playerViewController(_ playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) {// 在这里,你可以决定在退出画中画模式后是否保持在当前视图。// 这个例子中我们选择保持在当前视图。completionHandler(true)}}
}struct playView: View {var body: some View {VStack {VideoPlayerView(videoURL: URL(string: "http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8")!).frame(height: 400)}
//        .onAppear {
//            player.play()
//        }
//        .onDisappear {
//            player.pause()
//        }}
}

注意:画中画只能在真机上运行,xcode上的模拟器没有画中画功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/210120.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从入门到精通!Python数据分析畅销书《利用Python进行数据分析》第三版中文版助你成为数据分析师!

Python数据分析畅销书《利用Python进行数据分析》第三版中文版助你成为数据分析师! 个人简介什么是数据分析如何自学数据分析书籍推荐作译者简介作者简介译者简介 主要变动导读视频:购书链接:参与方式往期赠书回顾 个人简介 🏘️&…

【Jenkins】jenkins发送邮件报错:Not sent to the following valid addresses:

jenkins报错未能发送邮件到指定邮箱 注意:这是在系统配置中修改 在系统配置》邮件通知中添加配置信息 注意:这个是在项目的配置下修改 配置完成后,重新执行发送邮件成功!!!

docker安装mysql挂着目录和mysql备份和恢复

第一,镜像拉取,运行镜像并挂载目录,尝试挂bin下,启动不了,不知为啥 docker run --privilegedtrue -itd --namevmysql -p 3306:3306 -v /home/vmysql:/home/vmysql -e MYSQL_ROOT_PASSWORD123456 mysql(图…

Docker 安装 Apache

目录 拉取官方 Apache 镜像 查看本地镜像 列出正在运行的容器 运行 Apache 容器 创建一个 HTML 文件:index.html 访问 Apache 拉取官方 Apache 镜像 查找 Docker Hub 上的 httpd 镜像。 可以通过 Tags 查看其他版本的 httpd,默认是最新版本 httpd…

深入解析Java 8中HashMap的底层原理

引言 HashMap是Java中常用的集合类,用于存储键值对。其底层实现经过多次优化,包括哈希算法、数组扩容、链表转红黑树等。本文将深入研究HashMap的底层原理,并详细探讨如何解决哈希碰撞的技术。 1. 哈希算法 HashMap的核心是哈希算法&#…

如何搭建Zblog网站并通过内网穿透将个人博客发布到公网

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕…

【图文详解】SiamFC++与图注意力的强强联合:单目标追踪系统

1.研究背景与意义 随着计算机视觉技术的不断发展,单目标追踪(Single Object Tracking, SOT)作为计算机视觉领域的一个重要研究方向,已经在许多实际应用中得到了广泛的应用。单目标追踪系统可以通过分析视频序列中的目标运动&…

并行与分布式计算 第9章 算法设计

文章目录 并行与分布式计算 第9章 算法设计9.1 设计过程9.1.1 PCAM设计过程9.1.2 划分9.1.3 通信9.1.4 组合9.1.5 映射 8.2 设计方法8.2.1 划分技术9.2.2 分治9.2.3 平衡树技术9.2.4倍增技术9.2.5 流水线技术9.2.6 破对称技术 并行与分布式计算 第9章 算法设计 9.1 设计过程 …

CFA一二三级24年学习资料

还在持续更新中,要一起学习的话点赞加留言吧。

PTA-用天平找小球

三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。 输入格式: 输入在一行中给出3个正整数,顺序对应球A、B、C的重量。 输出格式: 在一行中输出唯一的那个不一样的球。 输入样例&#xff…

【深度学习】如何选择神经网络的超参数

1. 神经网络的超参数分类 神经网路中的超参数主要包括: 1. 学习率 η 2. 正则化参数 λ 3. 神经网络的层数 L 4. 每一个隐层中神经元的个数 j 5. 学习的回合数Epoch 6. 小批量数据 minibatch 的大小 7. 输出神经元的编码方式 8. 代价函数的选择 9. 权重初始化的方法 …

哪种小型洗衣机好用?四款公认好用的内衣洗衣机推荐

在近年以来,由于人们对健康的认识和生活质量的不断改善,使得内衣洗衣机这一类的产品在近年来得到了飞速的发展,洗烘一体机、洗烘套装的价格总体下降,功能和性能都得到了改善,往往更多的用户会选择一台或者多台洗衣机来…