1

我正在使用以下代码访问所有 ALAssetsLibrary 图像,但 ALAssetsLibrary 为我提供了保存的视频缩略图图像以及来自 ALAssetsLibrary 的保存图像。如何使用代码防止这种情况,以便我只能获取保存的图像?

//Method to get all images from devices library
 - (NSMutableArray*)getAllImagesFromLibrary
 {
     //get all images from image library
     void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
     if(result != NULL) {
         //Insert objects into array
         [self.arrOfAllImages addObject:result];
        }
     };

     void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) =  ^(ALAssetsGroup *group, BOOL *stop) {
     if(group != nil) {
         [group enumerateAssetsUsingBlock:assetEnumerator];
        }
     };

     //NSMutableArray allacation
     NSMutableArray *arrOfAllImage = [[NSMutableArray alloc] init];
     static dispatch_once_t pred = 0;
     static ALAssetsLibrary *library = nil;
     dispatch_once(&pred, ^{
         library = [[ALAssetsLibrary alloc] init];
     });

     [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
     usingBlock:assetGroupEnumerator
     failureBlock: ^(NSError *error) {
         NSLog(@"Failure");
     }];

     return arrOfAllImage;

}
4

3 回答 3

2

在枚举之前设置一个过滤器:

[group setAssetsFilter: [ALAssetsFilter allPhotos]];
于 2013-02-27T16:05:32.637 回答
1

检查您的结果,如果它会对添加数组进行成像,否则不会

void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
    if(result != NULL) {
        if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto])
        {
            //Insert objects into array
            [self.arrOfAllImages addObject:result];
        }
    }
};
于 2013-02-27T15:58:52.123 回答
0

您可以通过ALAssetsGroupType提及多种类型的 Asset

他们是

   ALAssetsGroupLibrary        
   ALAssetsGroupAlbum          
   ALAssetsGroupEvent          
   ALAssetsGroupFaces          
   ALAssetsGroupSavedPhotos    
   ALAssetsGroupPhotoStream    
   ALAssetsGroupAll  

1

ALAssetsGroup 库

包含从 iTunes 同步的所有资产的资料库组。

在 iOS 4.0 及更高版本中可用。

中宣布ALAssetsLibrary.h

2

ALAssetsGroup相册

在设备上创建或从 iTunes 同步的所有专辑,不包括照片流或共享流

在 iOS 4.0 及更高版本中可用。

中宣布ALAssetsLibrary.h

3

ALAssetsGroupEvent

所有事件,包括在相机连接套件导入期间创建的事件。

在 iOS 4.0 及更高版本中可用。

中宣布ALAssetsLibrary.h

4

ALAssetsGroupFaces

从 iTunes 同步的所有面孔专辑。

在 iOS 4.0 及更高版本中可用。

中宣布ALAssetsLibrary.h

5

ALAssetsGroupSavedPhotos

相机胶卷中的所有照片。

在 iOS 4.0 及更高版本中可用。

中宣布ALAssetsLibrary.h

6

**ALAssetsGroupPhotoStream**

The PhotoStream album.

In iOS 6.0 and later, this also includes Shared Streams.

Available in iOS 5.0 and later.

Declared in `ALAssetsLibrary.h`.

7

ALAssetsGroupAll

与除 ALAssetsGroupLibrary 之外的所有组类型进行 ORing 相同。

在 iOS 4.0 及更高版本中可用。

中宣布ALAssetsLibrary.h

您可以查看更多详细信息developer.apple

示例

 [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
     usingBlock:assetGroupEnumerator
     failureBlock: ^(NSError *error) {
         NSLog(@"Failure");
     }];
于 2013-02-28T04:48:24.893 回答