为了账号安全,请及时绑定邮箱和手机立即绑定

使用AssetsLibrary框架从iPhone photoLibrary数组中获取所有图片?

使用AssetsLibrary框架从iPhone photoLibrary数组中获取所有图片?

红颜莎娜 2019-11-29 10:41:44
我想从photoLibrary获取所有图片。我希望可以直接使用的方法或示例。
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

从ALAssetsLibrary现在开始不推荐使用,并且Photo Framework是新的。我做了自己的功能,Objective C从“相机胶卷”中获取所有照片并存储NSArray并显示在我的Collectionview中


 NSArray *imageArray;

 NSMutableArray *mutableArray;


-(void)getAllPhotosFromCamera

{

    imageArray=[[NSArray alloc] init];

    mutableArray =[[NSMutableArray alloc]init];


    PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];

    requestOptions.resizeMode   = PHImageRequestOptionsResizeModeExact;

    requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;

    requestOptions.synchronous = true;

    PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil];


    NSLog(@"%d",(int)result.count);


    PHImageManager *manager = [PHImageManager defaultManager];

    NSMutableArray *images = [NSMutableArray arrayWithCapacity:[result count]];


    // assets contains PHAsset objects.


    __block UIImage *ima;

    for (PHAsset *asset in result) {

        // Do something with the asset


        [manager requestImageForAsset:asset

                           targetSize:PHImageManagerMaximumSize

                          contentMode:PHImageContentModeDefault

                              options:requestOptions

                        resultHandler:^void(UIImage *image, NSDictionary *info) {

                            ima = image;


                            [images addObject:ima];

                        }];



    }


    imageArray = [images copy];  // You can direct use NSMutuable Array images

}


查看完整回答
反对 回复 2019-11-29
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

-(void)getFromGallery:(BOOL )IsImages

{

    if(self.csCollectionsArray != nil)

        [self.csCollectionsArray removeAllObjects];

    __block NSMutableDictionary *date = [[NSMutableDictionary alloc] init];

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

    NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces | ALAssetsGroupSavedPhotos;

    [csAssetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:^(ALAssetsGroup *group, BOOL *stop)

    {

        if([group numberOfAssets] > 0)

        {

            if(IsImages)

                [group setAssetsFilter:[ALAssetsFilter allPhotos]];

            else

                [group setAssetsFilter:[ALAssetsFilter allVideos]];

            [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)

            {

                if(asset)

                { //1.fetching all assets from device library

                    //2.Add all fetched assests from library

                    [date setObject:asset forKey:[asset valueForProperty:ALAssetPropertyDate]];

                }

            }];

        }

        else

        { NSLog(@"---> load table -------->");

            if(date != nil && date.count > 0)

            { //3.Sort using date by ascending order and moved to dictionary to array

                NSArray *sortedKeys = [[date allKeys] sortedArrayUsingSelector: @selector(compare:)];

                for (NSString *key in sortedKeys)

                    [self.csCollectionsArray addObject: [date objectForKey:key]];

                //4.Load images into collection view after fetching all datas

                [self reloadCollectionView];

                if(self.csCollectionView != nil)

                    [self.csCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:([self.csCollectionsArray count] - 1) inSection:0] atScrollPosition:UICollectionViewScrollPositionBottom animated:YES];

            }

            date = nil;

        }

    }failureBlock:^(NSError *error)

    {

        if((csCollectionsArray == nil || [csCollectionsArray count] == 0))

        {

            ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus]; if(status != ALAuthorizationStatusAuthorized)

            {

                [self showAlertAndCloseUploaderView:@"You can just go to \"Settings\" app (General -> Reset -> Reset Location & Privacy) then come again and click ok when the alert dialog is showing for enable the permission to access the photo library"];

            }

        }

    }];

}

您可以使用以下方法从ios中的资产库中获取所有图像或视频。使用此资产库框架(必须)注:-#import


-(void)getFromGallery:(BOOL )IsImages

{

    if(self.csCollectionsArray != nil)

        [self.csCollectionsArray removeAllObjects];

    __block NSMutableDictionary *date = [[NSMutableDictionary alloc] init];

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

    NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces | ALAssetsGroupSavedPhotos;

    [csAssetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:^(ALAssetsGroup *group, BOOL *stop)

    {

        if([group numberOfAssets] > 0)

        {

            if(IsImages)

                [group setAssetsFilter:[ALAssetsFilter allPhotos]];

            else

                [group setAssetsFilter:[ALAssetsFilter allVideos]];

            [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)

            {

                if(asset)

                { //1.fetching all assets from device library

                    //2.Add all fetched assests from library

                    [date setObject:asset forKey:[asset valueForProperty:ALAssetPropertyDate]];

                }

            }];

        }

        else

        { NSLog(@"---> load table -------->");

            if(date != nil && date.count > 0)

            { //3.Sort using date by ascending order and moved to dictionary to array

                NSArray *sortedKeys = [[date allKeys] sortedArrayUsingSelector: @selector(compare:)];

                for (NSString *key in sortedKeys)

                    [self.csCollectionsArray addObject: [date objectForKey:key]];

                //4.Load images into collection view after fetching all datas

                [self reloadCollectionView];

                if(self.csCollectionView != nil)

                    [self.csCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:([self.csCollectionsArray count] - 1) inSection:0] atScrollPosition:UICollectionViewScrollPositionBottom animated:YES];

            }

            date = nil;

        }

    }failureBlock:^(NSError *error)

    {

        if((csCollectionsArray == nil || [csCollectionsArray count] == 0))

        {

            ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus]; if(status != ALAuthorizationStatusAuthorized)

            {

                [self showAlertAndCloseUploaderView:@"You can just go to \"Settings\" app (General -> Reset -> Reset Location & Privacy) then come again and click ok when the alert dialog is showing for enable the permission to access the photo library"];

            }

        }

    }];

}

查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 713 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信