使用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];

原文連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM