我试图从图书馆中取照片.它有效,但我从图书馆的9张照片中得到了3张照片.这是我的代码:
let options = PHFetchOptions()
let userAlbums = PHAssetCollection.fetchAssetCollections(with: PHAssetCollectionType.album, subtype: PHAssetCollectionSubtype.any, options: options)
let userPhotos = PHAsset.fetchKeyAssets(in: userAlbums.firstObject!, options: nil)
let imageManager = PHCachingImageManager()
userPhotos?.enumerateObjects({ (object: AnyObject!, count: Int, stop: UnsafeMutablePointer) in
if object is PHAsset {
let obj:PHAsset = object as! PHAsset
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
let options = PHImageRequestOptions()
options.deliveryMode = .fastFormat
options.isSynchronous = true
imageManager.requestImage(for: obj, targetSize: CGSize(width: obj.pixelWidth, height: obj.pixelHeight), contentMode: .aspectFill, …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个简单的照片选择器,它现在有两个选项:最近和收藏夹.我正在做的是尝试获取所有照片creationDate但是这会在我的数据源中以错误的顺序返回图像.多年前在数据源的开头有照片,而且不到几分钟的照片分散在各处.我认为问题是我需要首先告诉主要的fetchResult排序顺序,但我不认为这是可能的:Unsupported sort descriptor in fetch options: (creationDate, ascending, compare:
我很感激提供任何帮助.码:
@property (nonatomic, strong) NSMutableOrderedSet *recentsDataSource;
@property (nonatomic, strong) NSMutableOrderedSet *favoritesDataSource;
- (void)setup
{
PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum | PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
for (PHAssetCollection *sub in fetchResult)
{
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc]init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
PHFetchResult *assetsInCollection = [PHAsset fetchAssetsInAssetCollection:sub options:fetchOptions];
for (PHAsset *asset in assetsInCollection)
{
[self.recentsDataSource addObject:asset];
if (asset.isFavorite)
{
[self.favoritesDataSource addObject:asset];
}
}
}
}
Run Code Online (Sandbox Code Playgroud) objective-c ios photosframework phphotolibrary phfetchoptions
APHCollectionList是一个文件夹,可以包含任意数量的专辑和/或文件夹。我目前正在通过 获取列表中的集合PHCollection.fetchCollectionsInCollectionList(list, options: nil)。
PHAssetCollection这可能会返回或类型的对象PHCollectionList。我只对了解该列表中的 s 感兴趣PHAssetCollection。文档指出您可以使用获取选项应用过滤谓词以返回数据的子集,但我不知道如何使用它来仅获取专辑。如何使用PHFetchOptions才能仅返回PHAssetCollection给定的 s PHCollectionList?
我需要获取按拍摄日期排序的三张照片 - 最新是最近拍摄的。我目前这样做的方法是获取所有照片资产,然后以适当的索引(0、1、2)获取资产。虽然这有效,但我很好奇当我只对前三名感兴趣时是否有更有效的方法来做到这一点。文档解释了 fetch 不会返回所有图像数据 - 只有元数据,但我仍然不需要获取所有元数据。是否有PHFetchOptionI 可以用来限制 fetch 或NSPredicate,或者不必担心?
var assetsFetchResults = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
let imageManager = PHCachingImageManager()
if assetsFetchResults?.count > 0 {
var asset = assetsFetchResults?[0] as? PHAsset
imageManager.requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: nil, resultHandler: ...)
}
//repeat for index 1 and 2
Run Code Online (Sandbox Code Playgroud) 所以我使用下面的代码从库中获取所有工作正常的图像:
func grabPhotos(){
let imgManager = PHImageManager.default()
let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = true
requestOptions.deliveryMode = .highQualityFormat
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
if let fetchResults : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions){
if fetchResults.count>0{
for i in 0..<fetchResults.count{
imgManager.requestImage(for: fetchResults.object(at: i), targetSize: CGSize(width:100, height: 100), contentMode: .aspectFill, options: requestOptions, resultHandler: {
image, error in
self.Galleryimages.append(image!)
print("array count is ",self.Galleryimages.count)
self.photoCollectionview.reloadData()
})
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在 UICollectionView 中显示所有图像,但我没有找到任何方法在单击任何缩略图时获取原始图像。当用户单击 UICollectionView 中填充的任何缩略图时,我想获取原始图像(全尺寸图像)。
谢谢。