2017-10-21 155 views
1

我对Swift比较陌生。Swift3:以集合视图显示视频

我目前正试图抓取存储在照片库中的视频并将它们显示在集合视图中。在收藏视图中选择视频后,我希望能够播放视频。

现在我已经写功能grabVideos的一部分,我有2个问题:

  1. 我应该如何储存这些视频吗?它们可以作为UIImage存储吗?我发现很多其他来源都是从在线来源获取视频,他们只是存储视频网址
  2. 我应该在resultHandler中做什么?我会认为这就是被我我的视频存储到一个全局数组

注意:下面的代码是一个函数调用getVideos()

let imgManager = PHImageManager.default() 
    let requestOption = PHVideoRequestOptions() 
    requestOption.isSynchronous = true 
    requestOption.deliveryMode = .highQualityFormat 

    let fetchOption = PHFetchOptions() 
    fetchOption.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 

    if let fetchResult:PHFetchResult = PHAsset.fetchAssets(with: .video, options: fetchOption) { 

     if fetchResult.count > 0 { 
      for i in 0...fetchResult.count { 
       imgManager.requestAVAsset(forVideo: fetchResult.object(at: i) as! PHAsset, options: requestOption, resultHandler: {{ (<#AVAsset?#>, <#AVAudioMix?#>, <#[AnyHashable : Any]?#>) in 
        <#code#> 
        }}) 
      } 
     } else { 
      print("Error: No Videos Found") 
     } 
    } 
+0

要显示视频的视频或缩略图(例如视频的一个关键帧) – Ladislav

+0

我想显示在集合视图的缩略图,但选择后,我想播放视频 –

回答

0

首先你一个变量添加到您的ViewController var fetchResults: PHFetchResult<PHAsset>?

然后你执行例如

let fetchOption = PHFetchOptions() 
    fetchOption.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 

let fetchResults = PHAsset.fetchAssets(with: .video, options: fetchOption); 
self.fetchResults = fetchResults 

if fetchResults.count == 0 { 
    print("Error: No Videos Found") 
    return 
} 

viewDidLoad的获取在你collectionViewCell你必须添加一个UIImageView这样我们就可以在每个单元格显示缩略图,那么你只是做在集合视图中的数据源方法如下

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return fetchResults?.count ?? 0 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "reuse", for: indexPath) as! TestCollectionViewCell 
    let videoAsset = fetchResults!.object(at: indexPath.item) 
    PHImageManager.default().requestImage(for: videoAsset, targetSize: cell.bounds.size, contentMode: .aspectFill, options: nil) { (image: UIImage?, info: [AnyHashable : Any]?) in 
     cell.imageView.image = image 
    } 

    return cell 
} 

这可以在获得批准,但将是第一次尝试OK ,特别是看看使用PHCachingImageManager代替PHImageManager,更多关于这在下面的链接:

PHCachingImageManager

How to use PHCachingImageManager

如何从PHAsset播放视频,你可以找到回答:

Swift - Playing Videos from iOS PHAsset