gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 15:35:36 32 4
gpt4 key购买 nike

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

我的问题是,当包含该视频的页面不再可见时(使用 self.player?. seek(to: kCMTimeZero)self.player?.pause()

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

创建 scrollView(在 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))
}

您知道如何暂停上一页的视频吗?非常感谢您的帮助!

最佳答案

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

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

您可以在每个 View 中创建一个通知观察器,它监听 ScrollView 的变化并触发一个通用函数来停止视频(最好创建一个协议(protocol)来将这些 View 约束到通用函数,尽管我不会在这里做)。因此,在每个 View 中,您都在 ViewDidLoad 中添加这样的观察者:

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

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

    func stopVideo() {

self.player.stop()

}

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

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

每当 View 发生变化时,这将停止在所有 View 中播放任何视频。 P.S 还要记得在 deinit() 中移除观察者

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

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

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

您的每个 View 都必须实现此协议(protocol),例如:

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

然后在你的scrollview中,在你提到的“检测出现了什么页面并说明上一页”的函数中,可以简单地将上一个 View 和下一个 View 转换为协议(protocol)类型并调用相应的函数:

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

previousView as! StopVideoDelegate
previousView.stopVideo()
}

关于ios - 滚动到新页面时,将旧页面上的视频设置为 0.0 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44328964/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com