滚动到新页面时,将旧页面上的视频设置为 0.0 秒

莫里茨

我有一个scrollViewpagingEnabled设置为true这些页面中的每一个都包含一个覆盖整个屏幕的视频。使用for循环和一个名为的类PlayerView添加视频(不仅添加视频,还添加有关视频的信息)。PlayerView课程中,我有一个功能可以开始/停止在相应页面中播放视频,并且一切正常。

我的问题是,每当包含该视频的页面不再可见(使用self.player?.seek(to: kCMTimeZero)self.player?.pause()时,我想将视频设置为它的开头并在那里停止(可以说是 0.0 秒)。

在我的scrollView我有一个函数,它检测出现了哪个页面,并在用户从一个页面滚动到另一个页面时指出上一页(以索引的形式,例如当从第 2 页滚动到第 3 页时,该函数将打印:“1 2”)。举个例子:我想将第 2 页(索引:1)上的视频设置为 0 并暂停它。

创建滚动视图(在class HomeController: UIViewController, UIScrollViewDelegate

func initiateScrollView() {

    //create scrollView with paging enabled
    let scrollView = UIScrollView(frame: view.bounds)
    scrollView.isPagingEnabled = true
    scrollView.delegate = self
    view.addSubview(scrollView)

    //get page size
    let pageSize = view.bounds.size

    //three simple UIView are created (view1, view2, view3)

    //array with individual views
    let pagesViews = [view1, view2, view3]

    //amount of views
    let numberOfPages = pagesViews.count

    //add subviews (pages)
    for (pageIndex, page) in pagesViews.enumerated(){

        //add individual pages to scrollView
        page.frame = CGRect(origin: CGPoint(x:0 , y: CGFloat(pageIndex) * pageSize.height), size: pageSize)
        scrollView.addSubview(page)

        //add Subview with videoplayer frame to individual "pages"
        let videoPlayerFrame = CGRect(x: 0, y: 0, width: pageSize.width, height: pageSize.height)
        let videoPlayerView = PlayerView(frame: videoPlayerFrame)
        page.addSubview(videoPlayerView)

    }

    //adjust size of scrollView
    scrollView.contentSize = CGSize(width: pageSize.width, height: pageSize.height * CGFloat(numberOfPages))
}

您知道如何暂停上一页的视频吗?我将衷心感谢您的帮助!

格温亚

我认为您可以通过两种方式执行此操作,具体取决于您希望视频停止的准确程度。

方法一:上一个视图的视频停止,新视图的视频不自动播放

您可以在每个视图中创建一个通知观察者,它监听滚动视图的变化并触发一个通用函数来停止视频(创建一个协议来将这些视图限制为通用函数是一种很好的做法,尽管我不会这样做在这里)。所以在每个视图中,你在 ViewDidLoad 中添加一个像这样的观察者:

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.stopVideo), name: NSNotification.Name(rawValue: "stopVideo"), object: nil)

然后添加将在视图中调用的相应函数:

    func stopVideo() {

        self.player.stop()

    }

然后在您的滚动视图中,在您提到的“检测出现的页面并说明上一页”的功能中,只要滚动视图发生变化,您就会发出通知:

    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "stopVideo"), object: nil)

每当视图发生变化时,这将停止在所有视图中播放任何视频。PS 还要记得去掉 deinit() 中的观察者

方法二:上一视图的视频停止,新视图的视频会自动播放

如果上一个视频将停止并且新视频将自动播放,您可以为他们必须遵守的每个视图制定一个协议,如下所示:

    protocol StopVideoDelegate: class {
        func stopVideo()
        func startVideo()
    }

您的每个视图都必须实现此协议,例如:

    class ViewController1InScrollView: StopVideoDelegate {
         func stopVideo() {
             self.playerLayer.stop()
         }
         func startVideo() {
             self.playerLayer.start()
         }
    }

然后在您的滚动视图中,在您提到的“检测出现了什么页面并说明上一页”的功能中,可以简单地将上一个视图和下一个视图转换为协议类型并调用相应的函数:

    func theFunctionThatDetectsViewChangeInScrollView() {
        nextView as! StopVideoDelegate
        nextView.startVideo()

        previousView as! StopVideoDelegate
        previousView.stopVideo()
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

快速设置NSDate 0秒

来自分类Dev

FFmpeg分割视频未在0秒开始

来自分类Dev

MySQL当前时间为0秒

来自分类Dev

MySQL当前时间为0秒

来自分类Dev

Java Date 将分钟和秒设置为 0

来自分类Dev

上传到 firebase 的视频时长为 0 秒?

来自分类Dev

以60秒/分钟的速度将Integer / String重置为0

来自分类Dev

为什么FFmpeg视频的分割时间为595-600秒而不是0-5秒?

来自分类Dev

“进程终止状态为 -1073741510(0 分钟,6 秒)”

来自分类Dev

将d3 y轴时间格式设置为15秒增量和秒%15 == 0?

来自分类Dev

设置为0毫秒时setTimeout会做什么?

来自分类Dev

puppeteer 在没有新页面的情况下启动()?新页面结果 secureConnectionStart 为 0

来自分类Dev

当分钟和秒为0时,倒数计时器不会减少小时数

来自分类Dev

如何将显示为0的秒序列化DateTime?

来自分类Dev

Chrome 87.0.4280(Windows 10.0.0):执行0的null(跳过229)错误(34.875秒/ 0秒)

来自分类Dev

使用time.time()为函数计时通常返回0秒

来自分类Dev

为什么执行时间显示为0毫秒(java程序)?

来自分类Dev

VHDL-显示0到9之间的数字,暂停时间为1秒

来自分类Dev

为什么当计时器递减计数时,它从未在秒上显示0?

来自分类Dev

当计时器还剩0秒时如何隐藏计时器

来自分类Dev

为什么在对基准进行基准测试时NetHogs会报告0 KB /秒?

来自分类Dev

从挂起状态唤醒时延迟约 30 秒 - 设备 0-0008 无法恢复:错误 -110

来自分类Dev

如何将“ 0 days 00:09:06.633000000”对象转换为分钟/小时/秒?

来自分类Dev

边框设置为0时,页面底部出现空白

来自分类Dev

0是0 == 0(#评估为True?)

来自分类Dev

当我运行我的代码时,它会执行 0 0 0 0 0 0 0 0 0?

来自分类Dev

Haskell将(0/0)设置为qnan

来自分类Dev

设置除以0返回0

来自分类Dev

printf 0精度为0

Related 相关文章

  1. 1

    快速设置NSDate 0秒

  2. 2

    FFmpeg分割视频未在0秒开始

  3. 3

    MySQL当前时间为0秒

  4. 4

    MySQL当前时间为0秒

  5. 5

    Java Date 将分钟和秒设置为 0

  6. 6

    上传到 firebase 的视频时长为 0 秒?

  7. 7

    以60秒/分钟的速度将Integer / String重置为0

  8. 8

    为什么FFmpeg视频的分割时间为595-600秒而不是0-5秒?

  9. 9

    “进程终止状态为 -1073741510(0 分钟,6 秒)”

  10. 10

    将d3 y轴时间格式设置为15秒增量和秒%15 == 0?

  11. 11

    设置为0毫秒时setTimeout会做什么?

  12. 12

    puppeteer 在没有新页面的情况下启动()?新页面结果 secureConnectionStart 为 0

  13. 13

    当分钟和秒为0时,倒数计时器不会减少小时数

  14. 14

    如何将显示为0的秒序列化DateTime?

  15. 15

    Chrome 87.0.4280(Windows 10.0.0):执行0的null(跳过229)错误(34.875秒/ 0秒)

  16. 16

    使用time.time()为函数计时通常返回0秒

  17. 17

    为什么执行时间显示为0毫秒(java程序)?

  18. 18

    VHDL-显示0到9之间的数字,暂停时间为1秒

  19. 19

    为什么当计时器递减计数时,它从未在秒上显示0?

  20. 20

    当计时器还剩0秒时如何隐藏计时器

  21. 21

    为什么在对基准进行基准测试时NetHogs会报告0 KB /秒?

  22. 22

    从挂起状态唤醒时延迟约 30 秒 - 设备 0-0008 无法恢复:错误 -110

  23. 23

    如何将“ 0 days 00:09:06.633000000”对象转换为分钟/小时/秒?

  24. 24

    边框设置为0时,页面底部出现空白

  25. 25

    0是0 == 0(#评估为True?)

  26. 26

    当我运行我的代码时,它会执行 0 0 0 0 0 0 0 0 0?

  27. 27

    Haskell将(0/0)设置为qnan

  28. 28

    设置除以0返回0

  29. 29

    printf 0精度为0

热门标签

归档