zoukankan      html  css  js  c++  java
  • ALAssetsLibrary获取相册图片

    最近做了一下获取iPhone相册图片的事,看了一些ALAssetsLibrary相关的文章,受了些启发。不过对于其中的一些文章,我们大可善意地去相信作者还是想帮助我们的。

    ALAssetsLibrary是一个很有用的家伙,因为它能取各种资源,图片、视频,等等。笔者也是初学者,不敢大放厥词,这里把我实现的代码贴出来,请大家指点。只是取图片。

    先创建了一个类,只有一个属性:NSMutableArray *photos; 用来存放取到的图片。然后就可以在.m文件中写下面这个方法。

    中间的注释部分,是可以对self.photos进行操作的函数插入点。

    #pragma mark - 通过ALAssetsLibrary获取相册所有图片

     

    -(void)getAllPhotosFromSysAlbum {

        static int counter = 0;

        

        if(!self.photos) _photos = [NSMutableArray array];

        else [self.photos removeAllObjects];

        

        NSMutableArray *assetURLDictionaries = [[NSMutableArray alloc] init];

        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

        NSMutableArray *assetGroup = [[NSMutableArray alloc] init];

        

        void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop){

            if (result) {

                if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {

                    [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];

                    NSURL *url = (NSURL *)[[result defaultRepresentation] url];

                    

                    [library assetForURL:url resultBlock:^(ALAsset *asset){

                        [self.photos addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]];

                                             if (self.photos.count == counter) {

                                                  //这个地方就取到了图片,可以打印self.photos验证。

                                                  //可以在这里添加对图片的操作,展示或什么的,图片都保存在了self.photos数组里面。

                             }

                    }failureBlock:^(NSError *err){

                        NSLog(@"%@",err.description);

                    }];

                }

            }

        };

        

        void (^assetGroupEnumerator) (ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop){

            if(group){

                [group enumerateAssetsUsingBlock:assetEnumerator];

                [assetGroup addObject:group];

                counter = [group numberOfAssets];

            }

        };

        

        assetGroup = [[NSMutableArray alloc] init];

        

        [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:^(NSError *err){

            NSLog(@"%@",err.description);

        }];

    }

    最后,本人初学,还请各位大神不吝赐教。谢谢!

  • 相关阅读:
    Ubuntu14.04安装ROS Indigo
    STM32F103移植uCOSIII始终卡在PendSV或Systick处解决办法
    STM32F103移植uCOSIII始终卡在PendSV或Systick处解决办法
    WIN7下PS/2等键盘失灵无法使用的解决办法--实测有效
    WIN7下PS/2等键盘失灵无法使用的解决办法--实测有效
    在altium designer9 等中使用protell99se的如0805,0603等PCB封装库
    在altium designer9 等中使用protell99se的如0805,0603等PCB封装库
    VB将输入文本框的数字分割并按十六进制发送
    Windows 10同步时间的方法
    maven安装cucumber的pom文件设置
  • 原文地址:https://www.cnblogs.com/chen-jt/p/3850516.html
Copyright © 2011-2022 走看看