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

Posted

技术标签:

【中文标题】如何使纵向模式的视频适合方形单元格?【英文标题】:How do I make a video in portrait mode fit in a square cell? 【发布时间】:2019-08-19 23:52:13 【问题描述】:

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

有没有办法让纵向拍摄的视频适合方形单元格?

设置如下:

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委托方法如下:

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
  

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

【问题讨论】:

你能提供一些代码吗? @GustavoVollbrecht 当然!我刚刚更新了它。 【参考方案1】:

视频好像被剪掉了

是的,resizeAspectFill 就是这样做的。它填满了正方形,任何不适合的东西落在正方形之外并被切断。那里并不奇怪。如果这不是你想要的,你为什么要resizeAspectFill

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

【讨论】:

非常感谢!我最终意识到出于某种原因我有一些冲突的 NSLayoutConstraints。

以上是关于如何使纵向模式的视频适合方形单元格?的主要内容,如果未能解决你的问题,请参考以下文章

使表格单元格变成正方形

制作表格单元格(不是 3x3、2x4!)正方形?

UICollectionView 更改方向不正确的单元格数

纵向和横向的 UICollectionView 单元格间距

纵向和横向的 uicollectionview 单元格框架

如何使表格单元格根据内容缩小?