如何使用目标c中的Photo框架从图库访问照片

soh*_*hil 5 objective-c photo-gallery ios

我是Photo framework的新手,我不知道如何使用它.我使用了很多链接,但我很困惑如何在imageview中显示图像.

我想通过照片框架从画廊获取所有照片我正在尝试

NSMutableOrderedSet *recentsDataSource;
PHFetchResult *assetCollection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum | PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
    for (PHAssetCollection *sub in assetCollection)
    {
        PHFetchResult *assetsInCollection = [PHAsset fetchAssetsInAssetCollection:sub options:nil];

        for (PHAsset *asset in assetsInCollection)
        {
            [self.recentsDataSource addObject:asset];
        }
    }

    if (self.recentsDataSource.count > 0)
    {
        NSArray *array = [self.recentsDataSource sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]];
        NSLog(@"Photo Array : %@",array);
        self.recentsDataSource = [[NSMutableOrderedSet alloc]initWithArray:array];
    }
Run Code Online (Sandbox Code Playgroud)

我有这种类型的数组.

照片阵列:("5A2ABD38-D724-42B1-939A-F557D5CCE9FC/L0/001 mediaType = 1/0,sourceType = 1,(328x328),creationDate = 2015-10-14 06:06:22 +0000,location = 0 ,hidden = 0,favorite = 0","5391482F-9887-4518-9976-D5D544CDF8CA/L0/001 mediaType = 1/0,sourceType = 1,(450x800),creationDate = 2015-10-12 09:27:41 + 0000,location = 0,hidden = 0,favorite = 1","3B921984-6E79DE4D-B70D-C7FFB0AC1C63/L0/001 mediaType = 1/0,sourceType = 1,(3000x2002),creationDate = 2012-08- 08 09:25:30 +0000,location = 1,hidden = 0,favorite = 0","D64D501E-F85D-4EE8-9C79-414272621A80/L0/001 mediaType = 1/0,sourceType = 1,(1668x2500), creationDate = 2012-08-08 08:59:49 +0000,location = 1,hidden = 0,favorite = 0","46A57980-9C55-42A8-9792-6BD98B25F01D/L0/001 mediaType = 1/0,sourceType = 1,(3000x2002),creationDate = 2012-08-08 06:22:11 + 0000,location = 1,hidden = 0,favorite = 0","1E040EE9-99A9-4325-AB1F-CBF4E45111DA/L0/001 mediaType = 1/0,sourceType = 1,(4288x2848),creationDate = 2011-03-12 10:47:25 + 0000,location = 1,hidden = 0,favorite = 1","BF3A71CD-3065-43C0-A933-DD89BBE8C778/L0/001 mediaType = 1/0,sourceType = 1,(4288x2848),creationDate = 2009-10-09 08:39:20 + 0000,location = 0,hidden = 0,favorite = 0")location = 0,hidden = 0,favorite = 0")location = 0,hidden = 0,favorite = 0")

如何在imageview上显示图像.

Sne*_*eha 19

在.h/.m文件中添加

#import <Photos/Photos.h>
Run Code Online (Sandbox Code Playgroud)

全局变量:

@property(nonatomic , strong) PHFetchResult *assetsFetchResults;
@property(nonatomic , strong) PHCachingImageManager *imageManager;
Run Code Online (Sandbox Code Playgroud)

viewDidLoad代码:

// Fetch all assets, sorted by date created.
    PHFetchOptions *options = [[PHFetchOptions alloc] init];
    options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
    _assetsFetchResults = [PHAsset fetchAssetsWithOptions:options];

    _imageManager = [[PHCachingImageManager alloc] init];
Run Code Online (Sandbox Code Playgroud)

numberOfItemsInSection方法:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return [_assetsFetchResults count];
}
Run Code Online (Sandbox Code Playgroud)

UICollectionView cellForItemAtIndexPath:代码:

UICollectionViewCell *cell  = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellID" forIndexPath:indexPath];

UIImageView *imageView = (UIImageView *)[cell viewWithTag:101];
PHAsset *asset = _assetsFetchResults[indexPath.item];

        [_imageManager requestImageForAsset:asset targetSize:imageView.frame.size contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info)
         {
             imageView.image = result;
         }];
Run Code Online (Sandbox Code Playgroud)

[EDITED]

访问图片:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    PHAsset *asset = _assetsFetchResults[indexPath.item];

   [_imageManager requestImageForAsset:asset targetSize:CGSizeMake(200, 200) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info)
         {
             // result is the actual image object.
         }];
}
Run Code Online (Sandbox Code Playgroud)