Как изменить ширину и высоту AVPlayer в Swift - PullRequest
0 голосов
/ 31 октября 2018

Я использую AVKit для воспроизведения видео с URL, и видео воспроизводится без каких-либо проблем. Я создал PlayerViewClass, чтобы назначить игрока на просмотр.

PlayerViewClass.swift

import UIKit
import AVKit
import AVFoundation


class PlayerViewClass: UIView {

override static var layerClass: AnyClass {

    return AVPlayerLayer.self
}

var playerLayer: AVPlayerLayer {
    return layer as! AVPlayerLayer
}

var player: AVPlayer? {
    get {
        return playerLayer.player
    }

    set {
        playerLayer.player = newValue
    }
}

}

И я использовал это в cellForItemAt методе в моем ViewController

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCell", for: indexPath) as? VideoCollectionCell else {
            return UICollectionViewCell()
        }

    let videoUrl = URL(string: "file.mp4")

    let avPlayer = AVPlayer(url: videoUrl!)
    cell.playerView.playerLayer.player = avPlayer
    cell.playerView.frame = CGRect(x: 0, y: 0, width: 352, height: 180) // it is not resizing
    cell.playerView.player?.play()
    return cell
}

Я не понимаю, как я могу изменить размеры моего проигрывателя на всю ячейку myCell имеет высоту и ширину: -

CGSize(width: 352, height: 180)

CollectionViewCell класс: -

class VideoCollectionCell: UICollectionViewCell {

@IBOutlet weak var playerView: PlayerViewClass!


override func awakeFromNib() {
    super.awakeFromNib()

}
}

Пожалуйста, помогите.

image

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Попробуйте это: -

extension yourViewController : UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView,
        layout collectionViewLayout: UICollectionViewLayout,
        sizeForItemAt indexPath: IndexPath) -> CGSize {
        // your code here
        //width and height as per your requirement
        return CGSize(width: yourWidth, height: yourHeight)
    }
}

Надеюсь, это поможет тебе, спасибо.

0 голосов
/ 31 октября 2018

Код неверный. У каждого вида есть слой.

Пока это слой CALayer, а не AVPlayerLayer.

class PlayerViewClass: UIView {

override static var layerClass: AnyClass {

    return AVPlayerLayer.self
}

var playerLayer: AVPlayerLayer {
    return layer as! AVPlayerLayer
}

Вы используете CGRect,

cell.playerView.frame= CGRect(x: 0, y: 0, width: 352, height: 180)

это CGSize

CGSize(width: 352, height: 180)

enter image description here

...