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

来源:互联网 发布:商丘学院网络教学平台 编辑:程序博客网 时间:2024/04/30 02:06

系统的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:groupTypes15     usingBlock:assetGroupEnumerator16     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 else29   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];
复制代码


摘自:http://www.cnblogs.com/salam/archive/2012/12/23/2830250.html

0 0
原创粉丝点击