zoukankan      html  css  js  c++  java
  • 使用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];

    原文连接

  • 相关阅读:
    Java实现找出数组中重复次数最多的元素以及个数
    java经典小算法
    java将数组中的零放到末尾
    BP神经网络
    Centos配置Caffe详解
    JAVA面试题之实现字符串的倒序输出
    Android 发送短信与接收短信
    java 选择排序法
    java数组获取最值
    spring kafka consumer原理解析二
  • 原文地址:https://www.cnblogs.com/salam/p/imagepicker.html
Copyright © 2011-2022 走看看