[英]Set video on old page to 0.0 seconds when scrolled to new page
我有一個scrollView
pagingEnabled
設置為true
pagingEnabled
。 這些頁面中的每個頁面都包含一個覆蓋整個屏幕的視頻。 使用for
循環和名為PlayerView
的類添加視頻(不僅添加視頻,而且包含有關視頻的信息)。 在PlayerView
類中,我有一個功能,可以開始/停止在相應頁面中播放視頻,並且一切正常。
我的問題是,無論何時不再包含該視頻的頁面(使用self.player?.seek(to: kCMTimeZero)
我都希望將視頻設置為開始並在此處停止播放(可以說是0.0秒self.player?.seek(to: kCMTimeZero)
和self.player?.pause()
)。
在我的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))
}
您是否有辦法暫停上一頁中的視頻? 我將衷心感謝您的幫助!
我認為您可以通過兩種方式來完成此操作,具體取決於您希望視頻停止播放的程度。
方法1:上一個視圖上的視頻停止並且新視圖上的視頻不能自動播放
您可以在每個視圖中創建一個Notification觀察器,以偵聽滾動視圖的變化並觸發通用功能來停止視頻(創建協議以將這些視圖限制為通用功能是一種很好的做法,盡管我不會這樣做在這里)。 因此,在每個視圖中,您都需要在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()中刪除觀察者
方法2:上一個視圖上的視頻停止並且新視圖上的視頻會自動播放
如果上一個視頻將停止並且新視頻將自動播放,則可以為它們必須遵守的每個視圖制定協議,如下所示:
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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.