视频没有被加载到ios swift中的页面控制中

问题描述:

我在实现页面控制,并且在每个页面中都会播放视频,但是我已经使用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面临的问题将在第一个视图中播放,并在休息状态下查看其显示为空白屏幕。

为什么不使用应该使用UIPageViewController进行分页?可以使用UIScrollView,但是您需要实现自己的页面回收,否则最终会浪费大量内存。