import Foundationimport AVFoundationclass JsAVPlayerVIEw : UIVIEw { var player:AVPlayer? { get { return (self.layer as! AVPlayerLayer).player } set(newPlayer) { (self.layer as! AVPlayerLayer).player = newPlayer } } overrIDe class func layerClass() -> AnyClass { return AVPlayerLayer.self }}
我使用JsAVPlayerVIEw作为UICollectionVIEwCell中的子视图,如下所示,但我只看到了JsAVPlayerVIEw的背景.
class JsOnBoardingTutorialPageVIEw : UICollectionVIEwCell { // MARK: member variables private var tutorialVIDeoPlayer:AVPlayer! private var vIDeoPlayerVIEw:JsAVPlayerVIEw = JsAVPlayerVIEw() private var tutorialLabel:UILabel = UILabel() var tutorialText:String = "" { dIDSet { tutorialLabel.text = tutorialText } } // MARK: auto layout variables private var metrics:[String:CGfloat] = [ "margintop" : 30,"marginleft" : 30,"marginRight" : 30,"marginBottom" : 30,"textHeight" : 100,] private var autolayoutConstraints:[NSLayoutConstraint] = [NSLayoutConstraint]() // MARK: constructors overrIDe init(frame: CGRect) { super.init(frame: frame) self.backgroundcolor = UIcolor.JsBrandBlack() self.setupSubvIEws() } init() { super.init(frame: CGRect.zero) self.backgroundcolor = UIcolor.JsBrandBlack() self.setupSubvIEws() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } // MARK: subvIEw setup func setupSubvIEws() { self.setupTutorialVIDeoVIEw() self.setupTutorialLabel() self.setupConstraints() self.addConstraints(self.autolayoutConstraints) } func setupTutorialVIDeoVIEw() { self.vIDeoPlayerVIEw.translatesautoresizingMaskIntoConstraints = false self.vIDeoPlayerVIEw.backgroundcolor = UIcolor.bluecolor() if let player = self.tutorialVIDeoPlayer { self.vIDeoPlayerVIEw.player = player } self.addSubvIEw(self.vIDeoPlayerVIEw) } func setupTutorialLabel() { self.tutorialLabel.translatesautoresizingMaskIntoConstraints = false self.tutorialLabel.textcolor = UIcolor.JslightGray() self.tutorialLabel.Font = UIFont.JsH3WithWeight(.normal) self.tutorialLabel.numberOflines = 0 self.tutorialLabel.textAlignment = .Center self.addSubvIEw(self.tutorialLabel) } func setupConstraints() { let vIEws:[String:AnyObject] = [ "vIDeo" : self.vIDeoPlayerVIEw,"text" : self.tutorialLabel ] self.autolayoutConstraints.appendContentsOf( NSLayoutConstraint.constraintsWithVisualFormat( "V:|-margintop--marginBottom-[text(text@750)]-|",options: .AlignAllCenterX,metrics: self.metrics,vIEws: vIEws ) ) self.autolayoutConstraints.appendContentsOf( NSLayoutConstraint.constraintsWithVisualFormat( "H:|-marginleft--marginRight-|",options: NSLayoutFormatoptions(),vIEws: vIEws ) ) self.autolayoutConstraints.appendContentsOf( NSLayoutConstraint.constraintsWithVisualFormat( "H:|-marginleft-[text]-marginRight-|",vIEws: vIEws ) ) } // MARK: vIDeo setup func setVIDeo(url:NSURL) { self.tutorialVIDeoPlayer = AVPlayer(URL: url) self.vIDeoPlayerVIEw.player = self.tutorialVIDeoPlayer let playerLayer:AVPlayerLayer = self.vIDeoPlayerVIEw.layer as! AVPlayerLayer playerLayer.frame = self.vIDeoPlayerVIEw.frame playerLayer.vIDeoGravity = AVLayerVIDeoGravityResizeAspectFill } func playVIDeo() { let playerLayer = self.vIDeoPlayerVIEw.layer as! AVPlayerLayer if playerLayer.readyFordisplay { self.tutorialVIDeoPlayer.play() } else { print("Player not ready to play") } } func pauseVIDeo() { self.tutorialVIDeoPlayer.pause() } // MARK: layout Hack overrIDe func layoutSubvIEws() { super.layoutSubvIEws() self.tutorialLabel.preferredMaxLayoutWIDth = CGRectGetWIDth(self.tutorialLabel.bounds) super.layoutSubvIEws() }}
在我的视图控制器中,我设置了UICollectionVIEwCell(以及我试图显示的视频的URL),如下所示:
let cell:JsOnBoardingTutorialPageVIEw = collectionVIEw.dequeueReusableCellWithReuseIDentifIEr(self.CollectionVIEwCellReuseIDentifer,forIndexPath: indexPath) as! JsOnBoardingTutorialPageVIEwif let index = JsOnBoardingTutorialPage(rawValue: indexPath.row) { cell.setVIDeo((self.pageData[index]?.vIDeo)!) print(String(format: "vIDeo url: %@",(self.pageData[index]?.vIDeo)!)) cell.tutorialText = (self.pageData[index]?.text)! cell.playVIDeo()}return cell
如何让我的视频显示在其容器JsAVPlayerVIEw中?
解决方法 我认为问题是你永远不会调用AVPlayer的构造函数(据我所知,从你提供的代码中可以看到).有一个函数func setVIDeo(url:NSURL),但你没有调用这个函数. 总结以上是内存溢出为你收集整理的swift – AVPlayer / AVPlayerLayer没有出现在使用自动布局的子视图中全部内容,希望文章能够帮你解决swift – AVPlayer / AVPlayerLayer没有出现在使用自动布局的子视图中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)