• 使用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];
    复制代码

    原文连接

  • 相关阅读:
    spring的工厂类
    spring的基于XML方式的属性注入
    github上传大于100M的文件报错
    fatal: HttpRequestException encountered
    VAR 学习笔记3
    You are my great sunshine
    warning: LF will be replaced by CRLF in
    术语词汇
    XGBoost学习笔记2
    四大基本算法思想
  • 原文地址:https://www.cnblogs.com/lisa090818/p/4424166.html
Copyright © 2020-2023  润新知