iOS - 从ALAssetsLibrary获取相机胶卷图像

时间:2016-04-21 11:12:03

标签: ios objective-c

我设法使用以下代码从**ALAssetsLibrary**获取照片:

-(void)getPhotosFromAssetsLibWithPhotoFilter:(NSString *)filterAlbumString
{
    _assets = [@[] mutableCopy];
    __block NSMutableArray *tmpAssets = [@[] mutableCopy];
    __block NSMutableArray *albumGroup = [@[] mutableCopy];
    ALAssetsLibrary *assetsLibrary = [PhotoLibViewController defaultAssetsLibrary];
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop)
    {
        if (group != nil)
        {
            [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
             {
                 if(result)
                 {
                     if (![filterAlbumString isEqualToString:@""])
                     {
                         if ([[NSString stringWithFormat:@"%@", [group valueForProperty:ALAssetsGroupPropertyName]] isEqualToString:filterAlbumString])
                         {
                             [tmpAssets addObject:result];
                         }
                     }
                     else
                     {
                         [tmpAssets addObject:result];
                     }
                 }
             }];

            [albumGroup addObject:[NSString stringWithFormat:@"%@", [group valueForProperty:ALAssetsGroupPropertyName]]];
        }
        else
        {
            dispatch_async(dispatch_get_main_queue(), ^{

                if ([self respondsToSelector:@selector(retrievedPhotoLibrary:)])
                {
                    NSArray *albumGroupReversed = [[albumGroup reverseObjectEnumerator] allObjects];
                    [self retrievedPhotoLibrary:albumGroupReversed];
                }
            });

            self.assets = [[tmpAssets reverseObjectEnumerator] allObjects];

            [self.collectionView reloadData];
        }

    } failureBlock:^(NSError *error) {
        NSLog(@"Error loading images %@", error);
    }];
}

我这样用:

[self getPhotosFromAssetsLibWithPhotoFilter:@"Camera Roll"];

这很有效。但问题是我正在本地化我的应用程序和其他不是英语的语言不使用"Camera Roll"作为专辑的名称。当我使用@"Camera Roll"时,我没有获得任何图像。

是否有代表Camera Roll的名称?无论语言如何,这都适用于所有设备?

2 个答案:

答案 0 :(得分:1)

请使用ALAssetsGroupSavedPhotos进行过滤。

答案 1 :(得分:0)

尝试这样的事情,

 ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init];


[al enumerateGroupsWithTypes:ALAssetsGroupAll

                  usingBlock:^(ALAssetsGroup *group, BOOL *stop)
 {
     [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
      {
          if (asset)
          {
             // .. do something with the asset
                  }
      }
      ];
 }

                failureBlock:^(NSError *error)
 {
     // User did not allow access to library
     //.. handle error
 }
 ];

您可以通过替换enumerateGroupsWithTypes来使用不同的来源。

第二件事ALassetlibrary现已弃用,因此您应该尝试PHPhotoLibrary

希望这会有所帮助:)