項(xiàng)目中遇到了獲取本地所有圖片等需求亿眠,網(wǎng)上也找到了很好的教程贰逾,這里在記錄一下加深下印象荐吵。
多選圖片使用到了一個(gè)photos
框架有一篇文章對(duì)這個(gè)框架講解的很詳細(xì)了。使用photos
框架獲取到的圖片類(lèi)型是PHAsset
入撒,PHAsset可以得到一些圖片的具體信息隆豹,可以根據(jù)項(xiàng)目需要來(lái)使用。
打印PHAsset
下面進(jìn)入代碼部分:
首先引入 Frameworks
需要引入photos
框架衅金。然后代碼中引用包噪伊,并實(shí)現(xiàn)協(xié)議
import UIKit
import Photos
class SelectPhotoesViewController: PHPhotoLibraryChangeObserver {
// 數(shù)據(jù)源
private var photosArray = PHFetchResult()
獲取所有圖片:
func getAllPhotos() {
// 注冊(cè)通知
PHPhotoLibrary.sharedPhotoLibrary().registerChangeObserver(self)
// 獲取所有系統(tǒng)圖片信息集合
let allOptions = PHFetchOptions()
// 按照時(shí)間排序
allOptions.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: true)]
// 將元素集合拆解開(kāi),此時(shí) allResults 內(nèi)部是一個(gè)個(gè)的PHAsset單元
let allResults = PHAsset.fetchAssetsWithOptions(allOptions)
}
// 第一次獲取相冊(cè)信息氮唯,這個(gè)方法只會(huì)進(jìn)入一次
func photoLibraryDidChange(changeInstance: PHChange) {
getAllPhotos()
}
接下來(lái)就是展示圖片了鉴吹,一般都是在colloectionView
中展示出來(lái)所有的圖片:
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
}
有展示圖片也需要上傳圖片,我在項(xiàng)目中上傳到后臺(tái)的圖片數(shù)據(jù)是上傳的圖片的data數(shù)據(jù)惩琉,首先定義一個(gè)seletedPhotosArray
數(shù)組來(lái)保存選中的圖片豆励,接著就是獲取data數(shù)據(jù)了:
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
}
然后就是根據(jù)項(xiàng)目需求,把數(shù)據(jù)中的圖片data數(shù)據(jù)傳給后臺(tái)即可瞒渠。