繁体   English   中英

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

[英]iOS - Get Camera Roll images from ALAssetsLibrary

我设法使用以下代码从**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的名称? 无论语言如何,这都适用于所有设备吗?

请使用ALAssetsGroupSavedPhotos进行过滤。

尝试这样的事情,

 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

希望这会有所帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM