在 SwiftUI 中,如何添加循环视频作为全屏背景图像?

2024-04-10

我有一个大约 10 秒长的视频,我想在我的一个 SwiftUI 视图中作为全屏背景图像循环播放。我怎样才能实现这个?

第一个想法是与 Swift 合作import AVFoundation,但不确定这是否是正确的道路。


您可以使用AV框架系列和UIViewRepresentable去做这个:

import SwiftUI
import AVKit

struct PlayerView: UIViewRepresentable {
    func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<PlayerView>) {
    }
    
    func makeUIView(context: Context) -> UIView {
        return PlayerUIView(frame: .zero)
    }
}

为了使视频循环播放,我添加了一个观察者并设置actionAtItemEnd to .none支持循环。

当视频结束时,它将执行playerItemDidReachEnd(...)方法并寻找视频的开头并保持循环。

该示例指向远程视频 URL。如果您想指向应用程序中的文件,您可以使用Bundle.main.url这样做:

if let fileURL = Bundle.main.url(forResource: "IMG_2770", withExtension: "MOV") {
    let player = AVPlayer(url: fileURL)
    // ...
}

class PlayerUIView: UIView {
    private let playerLayer = AVPlayerLayer()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        let url = URL(string: "https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8")!
        let player = AVPlayer(url: url)
        player.actionAtItemEnd = .none
        player.play()
        
        playerLayer.player = player
        playerLayer.videoGravity = .resizeAspectFill
        
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(playerItemDidReachEnd(notification:)),
                                               name: .AVPlayerItemDidPlayToEndTime,
                                               object: player.currentItem)

        layer.addSublayer(playerLayer)
    }
    
    @objc func playerItemDidReachEnd(notification: Notification) {
        if let playerItem = notification.object as? AVPlayerItem {
            playerItem.seek(to: .zero, completionHandler: nil)
        }
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        playerLayer.frame = bounds
    }
}

struct ContentView: View {
    var body: some View {
        NavigationView {
            ZStack {
                PlayerView()
                    .edgesIgnoringSafeArea(.all)
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SwiftUI 中,如何添加循环视频作为全屏背景图像? 的相关文章

  • 有没有 SwiftUI 方法来制作文本上标或下标?

    我知道可以像这样应用偏移量Text TM offset x 0 y 7 但是有没有不同或更好的方法来在 SwiftUI 中创建一些上标或下标文本 这是使用的通用方法 baselineOffset Text Company font call
  • 为什么我的 UIActivityIndi​​catorView 不会停止动画?

    我正在尝试从我的应用程序代理管理活动指示器 这样我的任何视图都可以放置指示器 因此 我将其作为子视图添加到 窗口 并启动 停止 如下所示 void didStartActivity if activityIndicator nil acti
  • SwiftUI - 将数据传递到不同的视图

    我正在开发一个有 4 个不同视图的应用程序 主视图 内容视图 an AddView an EditView 以及一个分离的DataView在一个类中 我通过一个传递所有数据可观察对象到其他意见 在主视图中我有一个项目列表 在里面AddVie
  • 滚动 swiftUI 列表时,未调用单元格的任务修改器。怎么修?

    我写了一个异步图像视图 with swiftui 并在列表单元格中使用 AsyncImgView 使用任务修饰符在 Img 出现时从缓存或网络下载 Img 在 iOS16 之前一切正常 但在iOS16我发现当我滚动列表新细胞的AsyncIm
  • SwiftUI • 如何实现半屏ShareSheet?

    我在我的项目中实现了一个 ShareSheetSwiftUI App using UIViewControllerRepresentable Code struct ShareView UIViewControllerRepresentab
  • 前置条件失败:从 iOS 13.4 开始,在 SwiftUI 中使用 GeometryReader 时输入索引无效

    昨天 我将 XCode 和我的项目升级到 iOS 13 4 我开始在使用 GeometryReaders 的视图周围看到很多失败 除了 前提条件失败 输入索引无效 之外 该错误没有显示任何内容 升级到 13 4 1 后我遇到了完全相同的问题
  • CoreData 和 SwiftUI:环境中的上下文未连接到持久存储协调器

    我正在尝试通过构建一个作业管理应用程序来自学核心数据 我的代码构建良好 应用程序运行正常 直到我尝试将新分配添加到列表中 我收到这个错误Thread 1 EXC BREAKPOINT code 1 subcode 0x1c25719e8 在
  • Swiftui,按钮网格视图

    我在这里检查了有关网格视图的几个问题 但我的问题有点不同 我想为按钮创建一个网格视图 以便每个按钮按下时导航到不同的视图 所以它看起来像这样 这是网格按钮视图 https i stack imgur com Q6WWB jpg 所以我在这里
  • SwiftUI TabbedView 仅显示第一个选项卡的内容

    我正在尝试建立一个TabbedView使用以下简单代码 TabbedView Text Hello world tabItemLabel Text Hello Text Foo bar tabItemLabel Text Foo 运行时 两
  • 如何在 Swiftui 中使列表项行内的按钮不可点击?

    有没有办法让列表的整行都不可点击 我正在尝试使按钮行上只有按钮可单击 正如您所看到的 如果我尝试单击按钮行中的任何位置 无论是按钮本身 还是按钮周围的空白区域 它都会将其视为点击 有没有办法让您只能单击按钮本身 而不能单击按钮周围的白色间距
  • 理解 UIViewRepresentable

    斯威夫特 5 0 iOS 13 尝试了解 UIViewRepresentable 的工作原理 并将这个简单的示例放在一起 几乎就这样了 但也许完全是无稽之谈 是的 我知道 SwiftUI 中已经有一个 tapGesture 这只是一个测试
  • 为 iPhone SDK 优化绘图(用手指触摸)应用程序

    我正在编写一个使用手指绘制简单图表的应用程序 我让它在大部分情况下都能工作 但现在我正在尝试优化它的性能 当用户快速滑动手指时 我无法捕获足够的触摸事件来绘制平滑的路径 这是我目前的方法 1 我对 UIView 进行了子类化 并向 CGLa
  • 工作表关闭后 SwiftUI 导航栏项目框架未对齐

    在 SwiftUI 中关闭工作表后 导航栏按钮不可点击 以下是重现该问题的步骤 出示一张单子 将应用程序移至后台一小段时间 2 秒 恢复应用程序并向下滑动关闭工作表 现在导航栏按钮框架未对齐 点击的工作框架与按钮的可见框架不同 这在 iOS
  • 在 UIView 中绘制彩色文本 -drawRect: 方法

    我正在尝试在我的中绘制彩色文本UIView子类 现在我正在使用单视图应用程序模板 用于测试 除了以下内容外 没有任何修改drawRect method 文本已绘制 但无论我将颜色设置为什么 它始终是黑色的 void drawRect CGR
  • HStack 中的 SwiftUI EditButton 未激活编辑模式

    作为更大表单的一部分 我希望有一个带有列表的部分 其条目可以重新排序 在整个视图中 应该只能编辑该特定列表 而不能编辑其他内容 因此我希望将编辑按钮放在列表附近 如果我只是将 EditButton 设置为节标题 则可以对列表项重新排序 但无
  • SwiftUI - 在 NavigationView 中嵌套 TabView 时不显示导航栏标题

    由于应用程序特定的原因 我必须将 TabView 嵌套在 NavigationView 中 但是选项卡项目的导航栏标题不会显示 只是一个空的导航栏 有什么解决办法吗 struct ContentView View var body some
  • 针对 iOS 10.3 进行编译,但模块“SwiftUICharts”的最低部署目标为 iOS 13.0

    知道如何仅在 iOS 版本超过 iOS 13 时导入 SwiftUICharts 框架吗 我通过 文件 gt Swift 包 gt 添加包依赖项 添加了此框架 我的应用程序目标必须是 iOS 10 我将此框架导入到 swiftui 控制器中
  • .send() 和 .sink() 似乎不再适用于 Xcode 11 Beta 5 中的 PassthroughSubject

    在下面的代码中 当按下按钮时 Test 应该打印在控制台中 但事实并非如此 该事件不是通过发布者发送的 知道 Xcode 11 Beta 5 中的 PassthroughSubject 发生了什么吗 在 Xcode 11 Beta 4 中效
  • 如何检测 swiftui 中是否存在键盘

    我想知道按下按钮时键盘是否存在 我该怎么做 我已经尝试过 但我没有任何运气 谢谢 使用该协议 KeyboardReadable 你可以符合任何View并从中获取键盘更新 KeyboardReadable协议 import Combine i
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI

随机推荐

  • Javascript 函数显示所遵循城市的路线

    我正在 codewars com 上练习编码 我碰到这个问题 https www codewars com kata 5899a4b1a6648906fe000113 train javascript 我们正在追踪我们的流氓特工马修 奈特
  • WPF 多线程

    我正在绞尽脑汁地尝试让多线程在 WPF 中按照我想要的方式工作 我有一个名为 Manager 的对象 带有单例 它执行大量处理和查找 我希望它在与 UI 分开的线程中运行 UI 将调用 Manager 上的方法来执行 UI 应该做出反应的处
  • 使用.net 2.0 连接到 FTP 服务器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望连接到现有的 FTP 服务器 上传文件 等待服务器生成报告 然后将该报告下载回 VB NET 2
  • 您应该如何有效地批处理复杂的网格?

    渲染复杂网格的最佳方法是什么 我在下面写了不同的解决方案 想知道您对它们有何看法 让我们举个例子 如何渲染 Crytek Sponza 网格 PS 我不使用Ubershader 只使用单独的着色器 如果您通过以下链接下载网格 http gr
  • 执行eglSwapBuffer和eglMakeCurrent时性能低下

    我正在开发一个 Android Unity 插件 允许用户记录他 她的游戏玩法我的解决方案概述 使用 OpenGl FrameBufferObject FBO 使 Unity 离屏渲染到此 FBO Get the offscreen tex
  • Android 平板电脑的 IMEI 号码

    在我的应用程序中 我必须获得我正在使用的设备的唯一编号TelephonyManager 我能够得到imei or device id在 Android 手机中 但 Android 平板电脑 Xoom 可以获取唯一编号 我正在使用此代码来获取
  • Kotlin DSL 构建脚本依赖项更新[重复]

    这个问题在这里已经有答案了 已经有大量文章介绍了从使用 groovy 脚本迁移到使用 Kotlin DSL 进行 Gradle 依赖项管理如何成为管理构建脚本的理想方法以及其他提到的优点 然而 我发现的限制是缺乏这种 Gradle 管理方式
  • 班级人数限制是多少?

    我想知道一个班级的人数限制是多少 我做了一个简单的测试 define CLS name other class name public name other a other b other c other d other e other f
  • Foldr1 的融合定律?

    For foldr我们有融合定律 if f是严格的 f a b and f g x y h x f y 对全部x y then f foldr g a foldr h b 如何发现 导出类似的定律foldr1 显然甚至不能采取相同的形式 考
  • Request.Url.Host 是否包含子域?

    例如对于mail google com 它会返回google com还是mail google com 我自己实际上无法测试 它确实包含子域 例如mail google com
  • 你能使用 CSS 设置输入图像的 src 吗?

    你能使用 CSS 设置输入图像的 src 吗 这必须在 IE 中工作 No 你所能做的就是定义一个background imageURL 但与正确的 URL 不同 img 在很多方面 为什么需要这个 也许有一个解决方法
  • AWS EMR S3DistCp: auxService:mapreduce_shuffle 不存在

    我通过 SSH 连接到 AWS EMR v5 4 0 实例 并且想要调用 s3distcp 这个链接 http docs aws amazon com emr latest ReleaseGuide UsingEMR s3distcp ht
  • 如何使用 JMX 远程连接到 Dataproc 上的 Spark 工作线程

    我可以通过添加以下内容来很好地连接到驱动程序 spark driver extraJavaOptions Dcom sun management jmxremote Dcom sun management jmxremote port 91
  • 为我的 webpack 文件设置基本路径

    使用时requirejs 我这样做 require config baseUrl scripts console log Starting require A B C mainFunction 我在谷歌上搜索如何设置 Webpack 的基本
  • Azure:启动远程调试器失败

    我根据以下教程在 Windows Azure 中部署了一个 Web 角色 http weblogs asp net scottgu archive 2013 10 22 windows azure announcing release of
  • 如何在Java配置类中设置Spring weaver选项?

    我正在使用 Spring AOP 和提供的默认值DefaultContextLoadTimeWeaver 我希望能够编织持久化实体 并且我知道我必须设置编织器选项 来自控制台的警告 warning javax types are not b
  • Ruby on Rails Helper 方法 - HTML 显示为纯文本

    我的 Rails 应用程序有一个辅助方法 它返回一个字符串 其中包含 Google 网上论坛订阅表单的 HTML 代码 不幸的是 它以纯文本的形式出现在页面上 我怎样才能强制它呈现为 HTML 提前致谢 你的助手的结果需要在 Rails 3
  • 如何减慢或停止 XNA 中的按键速度

    我已经开始使用 XNA 框架编写游戏 并且遇到了一些我不知道如何正确解决的简单问题 我使用Texture2D 显示菜单并使用键盘 或游戏手柄 更改所选的菜单项 我的问题是当前用于在菜单项之间切换的功能太快了 我可能会单击向下按钮 它会向下移
  • 任意类型说明符上的 Defmethod?

    我想做的是 defgeneric fn x defmethod fn x integer 1 Positive integer defmethod fn x integer 1 Negative integer 我想要一个可以与任意类型说明
  • 在 SwiftUI 中,如何添加循环视频作为全屏背景图像?

    我有一个大约 10 秒长的视频 我想在我的一个 SwiftUI 视图中作为全屏背景图像循环播放 我怎样才能实现这个 第一个想法是与 Swift 合作import AVFoundation 但不确定这是否是正确的道路 您可以使用AV框架系列和