I have problem to get photos in moment wise like apple iphone have in ios8. I have implemented for ios8 using PHAsset and Photos.framework. Now, when i run same code in ios7 dev
You are out of luck with iOS 7. AssetsLibrary as you observed returns only albums (Camera Roll, user albums). Even though the Photos App in iOS 7 shows Moments, there are no developer APIs in iOS 7 to get Moments.
I found its solutions my self.
+ (ALAssetsLibrary *)defaultAssetsLibrary {
static dispatch_once_t pred = 0;
static ALAssetsLibrary *library = nil;
dispatch_once(&pred, ^{
library = [[ALAssetsLibrary alloc] init];
});
return library;
}
-(void)loadAssets{
NSMutableArray *unSortArray = [[NSMutableArray alloc] init];
ALAssetsLibrary *library = [MomentsVCTR defaultAssetsLibrary];
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group == nil) {
NSLog(@"Done!");
[self manageLocalAssets:unSortArray];
}
[group setAssetsFilter:[ALAssetsFilter allAssets]];
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *alAsset, NSUInteger index, BOOL *innerStop) {
if (alAsset) {
[unSortArray addObject:alAsset];
}
}];
} failureBlock: ^(NSError *error) {
NSLog(@"No groups: %@",error);
}];
}
-(void)manageLocalAssets:(NSMutableArray*)unSortArray{
NSMutableArray *_resultArray = [[NSMutableArray alloc] init];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd-MMM-yyyy"];
NSLog(@"in loadassets");
NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[unSortArray sortedArrayUsingDescriptors:descriptors];
for (int k=0; k<reverseOrder.count; k++) {
ALAsset *asset = (ALAsset *)[reverseOrder objectAtIndex:k];
NSString *dateStr = [df stringFromDate:[asset valueForProperty:ALAssetPropertyDate]];
if (![self.arrDate containsObject:dateStr]) {
[self.arrDate addObject:dateStr];
[self.arrEventID addObject:@"0"];
[self.arrEventName addObject:@"0"];
}
[_resultArray addObject:asset];
}
for (int i=0;i<self.arrDate.count;i++) {
NSMutableArray *arr = [[NSMutableArray alloc] init];
NSMutableArray *arr2 = [[NSMutableArray alloc] init];
int tPhoto = 0;
int tVideo = 0;
for (int j=0; j<_resultArray.count; j++) {
ALAsset *asset = (ALAsset*)[_resultArray objectAtIndex:j];
NSString *dateStr = [df stringFromDate:[asset valueForProperty:ALAssetPropertyDate]];
if ([[self.arrDate objectAtIndex:i] isEqualToString:dateStr]) {
UIImage *latestPhotoThumbnail = [UIImage imageWithCGImage:[asset thumbnail]];
[arr addObject:latestPhotoThumbnail];
latestPhotoThumbnail = nil;
if ([[asset valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {
[arr2 addObject:@"1"];
tVideo++;
}
else{
[arr2 addObject:@"0"];
tPhoto++;
}
NSDate *date = [asset valueForProperty:ALAssetPropertyDate];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateFormat:@"dd-MMM-yyyy"];
[self.imageDateArray addObject:[dateFormatter stringFromDate:date]];
[self.imageIdArray addObject:[NSString stringWithFormat:@"%d",i]];
}
}
[self.imagearray addObject:arr];
[self.arrContentType addObject:arr2];
[self.momentArray addObject:[NSString stringWithFormat:@"%lu",(unsigned long)arr.count]];
[self.arrPhotoCount addObject:[NSString stringWithFormat:@"%d",tPhoto]];
[self.arrVideoCount addObject:[NSString stringWithFormat:@"%d",tVideo]];
}
[self setButtonsSize];
self.collection.dataSource = self;
self.collection.delegate = self;
[self.collection reloadData];
[self.collection.collectionViewLayout invalidateLayout];
self.footerView.hidden = TRUE;
self.footerWebView.hidden = TRUE;
}