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

我想从照片库中得到所有的照片。 我宁愿可以直接使用的方法或示例。

//查看控制器标题(.h)文件

#import <UIKit/UIKit.h> #include <AssetsLibrary/AssetsLibrary.h> @interface getPhotoLibViewController : UIViewController { ALAssetsLibrary *library; NSArray *imageArray; NSMutableArray *mutableArray; } -(void)allPhotosCollected:(NSArray*)imgArray; @end 

//实现文件

声明全局计数variables为

 static int count=0; @implementation getPhotoLibViewController -(void)getAllPictures { imageArray=[[NSArray alloc] init]; mutableArray =[[NSMutableArray alloc]init]; NSMutableArray* assetURLDictionaries = [[NSMutableArray alloc] init]; library = [[ALAssetsLibrary alloc] init]; void (^assetEnumerator)( ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) { if(result != nil) { if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) { [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]]; NSURL *url= (NSURL*) [[result defaultRepresentation]url]; [library assetForURL:url resultBlock:^(ALAsset *asset) { [mutableArray addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]]; if ([mutableArray count]==count) { imageArray=[[NSArray alloc] initWithArray:mutableArray]; [self allPhotosCollected:imageArray]; } } failureBlock:^(NSError *error){ NSLog(@"operation was not successfull!"); } ]; } } }; NSMutableArray *assetGroups = [[NSMutableArray alloc] init]; void (^ assetGroupEnumerator) ( ALAssetsGroup *, BOOL *)= ^(ALAssetsGroup *group, BOOL *stop) { if(group != nil) { [group enumerateAssetsUsingBlock:assetEnumerator]; [assetGroups addObject:group]; count=[group numberOfAssets]; } }; assetGroups = [[NSMutableArray alloc] init]; [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:^(NSError *error) {NSLog(@"There is an error");}]; } -(void)allPhotosCollected:(NSArray*)imgArray { //write your code here after getting all the photos from library... NSLog(@"all pictures are %@",imgArray); } @end 

使用getAllPicture方法从照片库中获取照片。

或者你可以看看这个博客http://mutiselectimagepicker.blogspot.in/2014/08/imageselect-to-allow-multiple-selection.html

由于ALAssetsLibrary现在已经被弃用,并且Photo Framework是新的。 我在Objective C创build了自己的函数,从Camera Roll中获取所有照片并存储在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"]; } } }]; }