簡體   English   中英

未在iOS Swift的頁面控件中加載視頻

[英]Video is not being loaded in page control in ios swift

我正在實施頁面控制,並且將在每個頁面中播放視頻,但是我已經使用xib做到了,在每個xib中加載了每個視頻,只有第一個視頻正在播放,其余所有視頻都沒有播放,顯示為空白屏幕。

主要代號

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    loadScrollView()
}

func loadScrollView() {
    let pageCount : CGFloat = 3.0

    scrollView.backgroundColor = UIColor.clear
    scrollView.delegate = self
    scrollView.isPagingEnabled = true
    scrollView.contentSize = CGSize(width: scrollView.frame.size.width * pageCount, height: scrollView.frame.size.height)
    scrollView.showsHorizontalScrollIndicator = false

    pageController.numberOfPages = Int(pageCount)

    let v1 = Video1.instanceFromNib() // xib with video 1
    let v2 = Video2.instanceFromNib() // xib with video 2
    let v3 = Video3.instanceFromNib() // xib with video 3

    var videoClassArray  = [v1,v2,v3] as [UIView]

    for i in 0..<Int(pageCount) {
        print(self.scrollView.frame.size.width)
        var view = UIView(frame: CGRect(x: self.scrollView.frame.size.width * CGFloat(i), y: 0, width: self.scrollView.frame.size.width, height: self.scrollView.frame.size.height))
        view = videoClassArray[i]
        self.scrollView.addSubview(view)
    }
}


//MARK: UIScrollView Delegate
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let viewWidth: CGFloat = scrollView.frame.size.width
    // content offset - tells by how much the scroll view has scrolled.
    let pageNumber = floor((scrollView.contentOffset.x - viewWidth / 50) / viewWidth) + 1
    pageController.currentPage = Int(pageNumber)
}


//MARK: Page tap action
func pageChanged() {
    let pageNumber = pageController.currentPage
    var frame = scrollView.frame
    frame.origin.x = frame.size.width * CGFloat(pageNumber)
    frame.origin.y = 0
    scrollView.scrollRectToVisible(frame, animated: true)
}

上面是視圖控制器,可以將xib加載到各種視圖中,而xib代碼在下面。

class Video1: UIView {

class func instanceFromNib() -> UIView {
    return UINib(nibName: "Video1", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
}

var player: AVPlayer!
var playerLayer = AVPlayerLayer()
var videoName = "BoardSetup_1"

@IBOutlet weak var baseView: UIView!
override init(frame: CGRect) {
     super.init(frame: frame)

}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

}

override func layoutSubviews() {
    super.layoutSubviews()

    let videoURL = Bundle.main.url(forResource: videoName, withExtension: "mp4")

    player = AVPlayer(url: videoURL!)
    player?.actionAtItemEnd = .none
    player?.isMuted = true

    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    playerLayer.zPosition = -1

    playerLayer.bounds = self.layer.bounds

    playerLayer.frame = baseView.frame
    baseView.layer.addSublayer(playerLayer)
    baseView.backgroundColor = UIColor.blue

    player?.play()


    //loop video
    NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: player?.currentItem, queue: nil, using: { (_) in
        DispatchQueue.main.async {
            self.player?.seek(to: kCMTimeZero)
            self.player.play()
        }
    })


}
}

上面的代碼用於加載視頻的xib,其余xib的代碼相同,因此僅提及1 xib。 加載Xib時面臨的問題是,只有視頻會在第一視圖中播放,而在其余視圖中則顯示為空白屏幕。

為什么不使用應該使用UIPageViewController進行分頁? 可以使用UIScrollView,但是隨后您需要實現頁面回收,否則您將浪費大量內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM