如何使纵向模式的视频适合方形单元格?
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。但是,以纵向模式拍摄的视频似乎无法正确缩放。当我使用AVPlayerLayer
的videoGravity
属性并将其设置为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。以上是关于如何使纵向模式的视频适合方形单元格?的主要内容,如果未能解决你的问题,请参考以下文章