2012-09-28 14 views

Trả lời

29

// View Controller header (.h) tập tin ..

#import <UIKit/UIKit.h> 
#include <AssetsLibrary/AssetsLibrary.h> 

@interface getPhotoLibViewController : UIViewController 
{ 
ALAssetsLibrary *library; 
NSArray *imageArray; 
NSMutableArray *mutableArray; 
} 

-(void)allPhotosCollected:(NSArray*)imgArray; 

@end 

// thực hiện tập tin

khai báo biến đếm toàn cầu như

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 

Sử dụng getAllPicture phương pháp để có được hình ảnh từ thư viện ảnh.

HOẶC Bạn có thể có một cái nhìn tại blog này http://mutiselectimagepicker.blogspot.in/2014/08/imageselect-to-allow-multiple-selection.html

+1

Dấu chân bộ nhớ của cách tiếp cận trên là rất lớn! Mặc dù nó là một cách rất apt & đơn giản để làm điều đó. Quản lý bộ nhớ đặc biệt trở nên khó khăn trong việc này do sử dụng khối không đồng bộ. –

+1

Nó cho lỗi, nếu chúng ta sử dụng "#include " Vì vậy, hãy dùng nó trong phần đầu của bạn để tẩy bất kỳ lỗi: #import Đối với Trợ giúp: http : //stackoverflow.com/questions/10342931/alasset-valueforpropertyalassetpropertylocation-undeclared –

+0

nhập #import trong hơn đến lỗi này: loại Receiver 'ALAssetRepresentation' cho thông điệp dụ là một tuyên bố mong –

0

-(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"]; 
 
      } 
 
     } 
 
    }]; 
 
}

Bạn có thể sử dụng phương pháp dưới đây để lấy tất cả các hình ảnh hoặc video từ thư viện tài sản trong ios. Sử dụng khuôn khổ assetslibrary này (phải) LƯU Ý: - #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"]; 
      } 
     } 
    }]; 
} 
6

Kể từ ALAssetsLibrary bị phản đối ngay bây giờ và Photo Framework là cái mới. Tôi đã thực hiện chức năng của riêng tôi trong Objective C để có được tất cả các hình ảnh từ Camera Roll và lưu trữ trong NSArray và hiển thị trong Collectionview tôi

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 
}