ios - 如何使纵向模式下的视频适合方形单元格?

标签 ios swift video uicollectionview uicollectionviewcell

考虑一个 UICollectionView,其中每个单元格都包含一个 UIView。单元格中的 UIView 将链接到将播放视频的 AVPlayerLayer。但是,以纵向模式拍摄的视频似乎无法正确缩放。当我使用 AVPlayerLayervideoGravity 属性并将其设置为 resizeAspectFill 以便视频填充单元格时,它似乎剪切了视频。

Is there a way to make the video taken in portrait fit a square cell?

设置如下:

UICollectionView 提要中的单元格将包含一个 UIView,它将容纳视频播放器。这是 UIView 的类 PlayerViewClass:

import Foundation
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
        }
    }
}

单元格 MyCollectionViewCell 有一个链接到此 UIView 的 IBOutlet:

class MyCollectionViewCell {

    @IBOutlet weak var playerView: PlayerViewClass!


override func awakeFromNib() {
    super.awakeFromNib() 

   //Setup, not relevant

   }

}

FeedViewController 中 Feed 的 collectionView cellForItemAt indexPath 委托(delegate)方法如下:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)

      if let cell = cell as? MyCollectionViewCell {

      ...

      //Configuring the cell

      ...

      //Video player
      let avPlayer = AVPlayer(url: post.fullURL)

      **//TODO: Configure layout so the portrait video scales appropriately**

      //Setting cell's player
      cell.playerView.playerLayer.player = avPlayer

      //Play
      cell.playerView.player?.play()

    }
    return cell
  }

任何帮助将不胜感激,因为到目前为止我似乎找不到答案!

最佳答案

it seems to cut the video

是的,这就是 resizeAspectFill 所做的。它填满了正方形,任何不适合的东西都落在正方形之外并被切断。不足为奇。如果这不是您想要的,您为什么要请求 resizeAspectFill

也许您的意思是 resizeAspect。这将显示整个视频,在给定的限制(正方形)内。

关于ios - 如何使纵向模式下的视频适合方形单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57565169/

相关文章:

ios - iOS 4 的 UIPageViewController 模板回退

javascript - 网站无法在某些 IOS 设备上呈现 [白屏死机?]

ios - 沿弧线放置 UICollectionViewCells (UIBezierPath)

xcode - CGPathAddArc 路径没有出现在带有 Swift 的 SpriteKit 中

c++ - 使用带有网络摄像头的 FFmpeg 编码和 UDP

ios - Swift - 如何从语音保存文本文件

ios - 使用谷歌地图快速获取我的位置

swift - 在调用 Text 的初始化程序时没有完全匹配,我该如何在 SwiftUI 中解决这个问题?

Java - 使用 Xuggler 从图像创建视频

c++ - 比 C++ 中的 OpenCV 库更快地获取总帧数和 FPS