Swift之获取本地所有图片

项目中遇到了获取本地所有图片等需求,网上也找到了很好的教程,这里在记录一下加深下印象。

多选图片使用到了一个photos框架有一篇文章对这个框架讲解的很详细了。使用photos框架获取到的图片类型是PHAsset,PHAsset可以得到一些图片的具体信息,可以根据项目需要来使用。

打印PHAsset

下面进入代码部分:

首先引入 Frameworks需要引入photos框架。然后代码中引用包,并实现协议

 import UIKit
 import Photos
 class SelectPhotoesViewController: PHPhotoLibraryChangeObserver {
    //  数据源
    private var photosArray = PHFetchResult()

获取所有图片:

func getAllPhotos() {
  // 注册通知
  PHPhotoLibrary.sharedPhotoLibrary().registerChangeObserver(self)
  // 获取所有系统图片信息集合
  let allOptions = PHFetchOptions()
  // 按照时间排序
  allOptions.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: true)]
  //  将元素集合拆解开,此时 allResults 内部是一个个的PHAsset单元
  let allResults = PHAsset.fetchAssetsWithOptions(allOptions)
 }
  // 第一次获取相册信息,这个方法只会进入一次
  func photoLibraryDidChange(changeInstance: PHChange) {
        getAllPhotos()
  }

接下来就是展示图片了,一般都是在colloectionView中展示出来所有的图片:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell:SelectPhotosCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(cellIdentifier, forIndexPath: indexPath) as! SelectPhotosCollectionViewCell
    PHCachingImageManager.defaultManager().requestImageForAsset(photosArray[indexPath.row] as! PHAsset, targetSize: CGSizeZero, contentMode: .AspectFit, options: nil) { (result: UIImage?, dictionry: Dictionary?) in
            // 展示图片
            cell.imageView.image = result
        }
        return cell
    }

有展示图片也需要上传图片,我在项目中上传到后台的图片数据是上传的图片的data数据,首先定义一个seletedPhotosArray数组来保存选中的图片,接着就是获取data数据了:

func getImageData() -> NSMutableArray {
        let photoArr = NSMutableArray()
        for item in self.seletedPhotosArray {
            PHImageManager.defaultManager().requestImageDataForAsset(item, options: nil, resultHandler: { (imageData:NSData?, dataUTI:String?, orientation:UIImageOrientation?, dictionary:Dictionary?) in
                photoArr.addObject(imageData!)
            })   
        }
        return photoArr
    }

然后就是根据项目需求,把数据中的图片data数据传给后台即可。

你可能感兴趣的:(Swift之获取本地所有图片)