2017-05-26 11 views
0

我在實現頁面控制,並且在每個頁面中都會播放視頻,但是我已經使用xibs,在每個xib中加載每個視頻,只有第一個視頻是正在播放,休息所有視頻沒有播放,顯示爲空白屏幕。視頻沒有被加載到ios swift中的頁面控制中

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) 
} 

主代碼以上是視圖控制器,其中IM加載xibs成各種views.And的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,代碼與其餘xibs相同,因此只提及1個xib。 只有在加載xib視頻時,im面臨的問題將在第一個視圖中播放,並在休息狀態下查看其顯示爲空白屏幕。

回答

0

爲什麼不使用應該使用UIPageViewController進行分頁?可以使用UIScrollView,但是您需要實現自己的頁面回收,否則最終會浪費大量內存。

相關問題