您的位置:首页 > 其它

使用AssetsLibrary.Framework创建多图片选择控制器(翻译)

2012-12-23 21:06 423 查看
  系统的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的使用

ELCAlbumPickerController *albumController = [[ELCAlbumPickerController alloc] initWithNibName:@"ELCAlbumPickerController" bundle:[NSBundle mainBundle]];
ELCImagePickerController *elcPicker = [[ELCImagePickerController alloc] initWithRootViewController:albumController];
[albumController setParent:elcPicker];
[elcPicker setDelegate:self];

ELCImagePickerDemoAppDelegate *app = (ELCImagePickerDemoAppDelegate *)[[UIApplication sharedApplication] delegate];
[app.viewController presentModalViewController:elcPicker animated:YES];




原文连接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐