美文网首页
Swift之获取本地所有图片

Swift之获取本地所有图片

作者: 枫叶风 | 来源:发表于2017-02-20 15:53 被阅读0次

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

    多选图片使用到了一个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之获取本地所有图片

          本文链接:https://www.haomeiwen.com/subject/yvhewttx.html