使用AssetsLibrary.Framework创建多图片选择控制器

系统的UIImagePickerController只能让用户选择单图片,而一般情况下,我们需要上传多张图片,这时应该可以同时选择多张图片,否则用户体验会很差。因此多图片选择器就诞生了。

  在类库中,苹果为我们提供了一个AssetsLibrary.Framework的库,可以通过它获取设备里的图片和视频。在使用这个类库时, 我们需要导入,且<AssetsLibrary/AssetsLibrary.h>。然后我们可以使用它来获取不同组的枚举。

复制代码
 1 void (^assetGroupEnumerator)

 2 (struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop{

 3   if(group != nil) {

 4     [assetGroups addObject:group];

 5     NSLog(@"Number of assets in group: %d",

 6                  [group numberOfAssets]);

 7   }

 8 };

 9 

10 assetGroups = [[NSMutableArray alloc] init];

11 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

12 NSUInteger groupTypes = ALAssetsGroupAll; 

13 

14 [library enumerateGroupsWithTypes:groupTypes

15     usingBlock:assetGroupEnumerator

16     failureBlock:^(NSError *error) {NSLog(@"A problem occurred");}];

17 

18 NSLog(@"Asset groups: %@", assetGroups);

19 [library release];
复制代码

  1-8行,我们声明一个block,使用它来枚举所有asset group,然后将所有获取到的group放在NSMutableArray中。

复制代码
 1 void (^assetEnumerator)

 2 (struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {

 3   if(result != nil) {

 4     if(![assetURLDictionaries containsObject:[result valueForProperty:ALAssetPropertyURLs]]) {

 5       if(![[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {

 6         [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];

 7         [assets addObject:result];

 8       }

 9     }

10   }

11 };

12 

13 assets = [[NSMutableArray alloc] init];

14 assetURLDictionaries = [[NSMutableArray alloc] init];

15 

16 NSInteger indexOfExampleGallery = NSNotFound;

17 for (ALAssetsGroup *group in assetGroups) {

18   if ([[group valueForProperty:ALAssetsGroupPropertyName]

19       isEqualToString:@"ExampleGallery"])

20   indexOfExampleGallery = [assetGroups indexOfObject:group];

21 }

22 

23 if (indexOfExampleGallery != NSNotFound) {

24   [[assetGroups objectAtIndex:indexOfExampleGallery]

25   enumerateAssetsUsingBlock:assetEnumerator];

26   NSLog(@"Assets %@", assets);

27 }

28 else

29   NSLog(@"Gallery 'ExampleGallery' not found on device.");
复制代码

  代码中的ELCImagePickerController就是使用这个库来完成同时选择多张图片,当然视频也可以。

  ELCImagePickerController的使用

复制代码
1     ELCAlbumPickerController *albumController = [[ELCAlbumPickerController alloc] initWithNibName:@"ELCAlbumPickerController" bundle:[NSBundle mainBundle]]; 2 ELCImagePickerController *elcPicker = [[ELCImagePickerController alloc] initWithRootViewController:albumController]; 3  [albumController setParent:elcPicker]; 4  [elcPicker setDelegate:self]; 5 6 ELCImagePickerDemoAppDelegate *app = (ELCImagePickerDemoAppDelegate *)[[UIApplication sharedApplication] delegate]; 7 [app.viewController presentModalViewController:elcPicker animated:YES];
复制代码

使用AssetsLibrary.Framework创建多图片选择控制器

原文连接

你可能感兴趣的:(framework)