// MARK:- 获取全部图片,不分文件类型
private func getAllPhotos() {
// 注意点!!-这里必须注册通知,不然第一次运行程序时获取不到图片,以后运行会正常显示。体验方式:每次运行项目时修改一下 Bundle Identifier,就可以看到效果。
PHPhotoLibrary.shared().register(self as! PHPhotoLibraryChangeObserver) //代理
// 获取所有系统图片信息集合体
let allOptions = PHFetchOptions()
// 对内部元素排序,按照时间由远到近排序
allOptions.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: true)]
// 将元素集合拆解开,此时 allResults 内部是一个个的PHAsset单元
let allResults = PHAsset.fetchAssets(with: allOptions)
let count = allResults.count-1
for intex in 0...count {
let value = allResults.object(at: intex)
dataScoure.add(value)
// dataScoureDictionary.setValue(value, forKey: value!)
}
}
// PHPhotoLibraryChangeObserver 代理方法 第一次获取相册信息,这个方法只会进入一次
func photoLibraryDidChange(_ changeInstance: PHChange) {
getAllPhotos()
}
/*
NSSortDescriptor 指定用于对象数组排序的对象的属性。
如果是Employee对象需要按照name来排序,就生成下面的descriptor
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:name ascending:YES];
如果需要多个排序,比如先按name排序,再按入职日期排序。那就创建两个descriptor
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:hireDate ascending:YES];
两个descriptor放到数组里一起传给需要排序的数组。
如果对象就是NSString,就是字符串数组排序,那更简单了,sortdescriptor的key直接指定为nil,就直接排序对象,而不是对象的某一个属性了。
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject:descriptor];
NSArray *myDataArray = [NSArray arrayWithObjects:@"what", @"xero", @"highligth", @"mountain",@"Victory", @"Balance", nil];
NSArray *resultArray = [myDataArray sortedArrayUsingDescriptors:descriptors];
NSLog(@"%@", resultArray);
NSArray 使用sortedArrayUsingDescriptors,返回排序好的数组。
NSMutableArray可以直接使用sortUsingDescriptors,对数组本身排序。
*/
其他方法:
// MARK:- 获取全部图片,分文件类型
func getPHAsset() -> Void {
//当然,也可以使用下方的方法直接获取权限的状态
if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.denied {
alertView(_title: "您还没有开启相册权限", _message: "请您到:设置 > 恒然四季 中添加相册权限", _bText: "确定")
return
}
//search collection data
let sysfetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: nil)
// 获得相机胶卷
let cameraRoll = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumUserLibrary, options: nil).lastObject
for index in 0..<sysfetchResult.count {
let assetCollection = sysfetchResult.object(at: index)
let value = getAssetWith(assetCollection:assetCollection)
dataScoure.addObjects(from: value)
dataScoureDictionary.setValue(value, forKey: (assetCollection.localizedTitle!))
}
if cameraRoll != nil {
let value = getAssetWith(assetCollection:cameraRoll!)
dataScoure.addObjects(from: value)
dataScoureDictionary.setValue(value, forKey: (cameraRoll?.localizedTitle!)!)
}
}