ios(swiftui) 画中画

news/2024/7/20 21:24:04 标签: ios, swiftui, swift

 一、环境

要实现画中画 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?

       // 创建UIViewController
       func makeUIViewController(context: Context) -> AVPlayerViewController {
           let controller = AVPlayerViewController()
           controller.player = AVPlayer(url: videoURL!)
           controller.allowsPictureInPicturePlayback = true
           controller.delegate = context.coordinator
           return controller
       }

       // 更新UIViewController
       func updateUIViewController(_ uiViewController: AVPlayerViewController, context: Context) {
           uiViewController.player = AVPlayer(url: videoURL!)
           uiViewController.allowsPictureInPicturePlayback = true
           uiViewController.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: VideoPlayerView

            init(_ 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.niftyadmin.cn/n/5206465.html

相关文章

【MySQL】内连接和外连接

内连接和外连接 前言正式开始内连接外连接左外连接右外连接 前言 前一篇讲多表查询的时候讲过笛卡尔积,其实笛卡尔积就算一种连接,不过前一篇讲的时候并没有细说连接相关的内容,本篇就来详细说说表的连接有哪些。 本篇博客中主要用到的还是…

Linux下PBD调试

目录 pdb命令 pdb命令 r:运行脚本直到遇到断点c:执行直到遇到一个断点restart:重新开始执行n:下一步s:进入当前行函数w/bt:打印当前堆栈b:打断点 如果不跟参数,打印出所有的断点如果…

求解Beamforming-SOCP(CVX求解)

时间:2023年11月23日14:00:16: 直接上代码(辛苦两天才改出来的) clear all; K 4; %user number N4; %base station number var1e-9; H []; %initialize H matrix for i1:Kh 1/sqrt(2*K)*mvnrnd(zeros(N,1),eye(N),1)1i/sqrt(2*…

git操作分支命令

# 列出所有本地分支 $ git branch# 列出所有远程分支 $ git branch -r# 列出所有本地分支和远程分支 $ git branch -a# 新建一个分支,但依然停留在当前分支 $ git branch [branch-name]# 新建一个分支,并切换到该分支 $ git checkout -b [branch]# 新建一…

对于刚毕业,即将进入公司的程序员,有哪些忠告或建议?

作为一个刚毕业的新人程序员,除非你家里有矿,否则你是不得不成为一个打工人的。而你的这份工作可能会平复你对离开校园的焦虑,也可能会打破你对未来美好的幻想,你无法想象你接下来将会在这个行业待上一年又一年。为了避免你虚度时…

腾讯云轻量数据库开箱测评,1核1G轻量数据库测试

腾讯云轻量数据库1核1G开箱测评,轻量数据库服务采用腾讯云自研的新一代云原生数据库TDSQL-C,轻量数据库兼100%兼容MySQL数据库,实现超百万级 QPS 的高吞吐,128TB海量分布式智能存储,虽然轻量数据库为单节点架构&#x…

自动化提交git

1.前要 这里只是讲解如何在Windows上创建自动化脚本/程序来达到自动pull、commit、push,减少冗余的仓库更新工作,避免在多平台下合作造成版本冲突等。 2.原理 使用Windows下默认的cmd/bat脚本编写代码。 只需要在网络上查询一些相关的语法&#xff0…

如何在Simulink中使用syms?换个思路解决报错:Function ‘syms‘ not supported for code generation.

问题描述 在Simulink中的User defined function使用syms函数,报错simulink无法使用外部函数。 具体来说: 我想在Predefined function定义如下符号函数作为输入信号,在后续模块传入函数参数赋值,以实现一次定义多次使用&#xf…