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面臨的問題將在第一個視圖中播放,並在休息狀態下查看其顯示爲空白屏幕。