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

我想从photoLibrary获取所有图片。我希望可以直接使用的方法或示例。



红颜莎娜
浏览 664回答 3
3回答

慕田峪7331174

从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}

白衣染霜花

-(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"];            }        }    }];}
打开App,查看更多内容
随时随地看视频慕课网APP