Cómo mostrar el álbum de fotos con el arreglo del más nuevo al más antiguo.

Tengo un problema cuando uso el código siguiente para cargar el álbum de fotos desde el iPhone. Aunque cargué perfectamente, la primera foto apareció es la foto más antigua. ¿Es posible reorderar el pedido para que pueda get primero la última foto cargada, seguida de la más antigua en la parte posterior?

- (IBAction)imageFromAlbum:(id)sender { imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate = self; imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; [self presentViewController:imagePicker animated:YES completion:nil]; } 

Para lograr lo que desea, tendrá que crear su propio selector de fotos utilizando el marco de la biblioteca de activos. dependiendo de la versión de ios que esté usando puede usar UICollectionViewController (ios6 en adelante) o tendrá que crear la suya propia.

Para get todas las fotos / activos en el álbum de fotos guardadas, ejecute este método y luego clasifique los objects usando su date de creación en order descendente usando la propiedad ALAssetPropertyDate

thisVC.assetArray será el origen de datos para su tabla personalizada o controller de vista de colección. Estos dos methods son asíncronos, por lo que deberá actualizar la tablaView o collectionView una vez que se complete la fuente de datos

 __block YourViewController *thisVC = self; ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { if (group) { [self enumerateAssetForGroup:group forFilter:[ALAssetsFilter allPhotos] withCompletionBlock:^(id object) { thisVC.assetArray = object; [thisVC.assetArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSDate *date1 = [obj1 valueForProperty:ALAssetPropertyDate]; NSDate *date2 = [obj2 valueForProperty:ALAssetPropertyDate]; return ([date1 compare:date2] == NSOrdenetworkingAscending ? NSOrdenetworkingDescending : NSOrdenetworkingAscending); }]; //in case of table [thisVC.tableView reloadData]; //in case of collection view //reload collection view controller data }]; } } failureBlock:nil]; - (void)enumerateAssetForGroup:(ALAssetsGroup*)group forFilter:(ALAssetsFilter*)filter withCompletionBlock:(ALAssetsEnumeration)enumerationCompletionBlock { [group setAssetsFilter:filter]; __block NSInteger assetsCount = [group numberOfAssets]; __block NSMutableArray *assetArray = [[NSMutableArray alloc] init]; [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { if (result) { [assetArray addObject:result]; if (*stop) { enumerationCompletionBlock(assetArray); [assetArray release]; } } else if (assetsCount == 0) { enumerationCompletionBlock(nil); } }]; } 

esta parte escrita en el primer método clasificará su matriz en order descendente,

 [thisVC.assetArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSDate *date1 = [obj1 valueForProperty:ALAssetPropertyDate]; NSDate *date2 = [obj2 valueForProperty:ALAssetPropertyDate]; return ([date1 compare:date2] == NSOrdenetworkingAscending ? NSOrdenetworkingDescending : NSOrdenetworkingAscending); }]; 

Prueba esto si realmente quieres 🙂

Como se muestra aquí , puede get el nombre de file real de la image del UIImagePicker. Dado que parece ser capaz de acceder a ellos en order de date, una enumeración inversa de este resultado debería orderar su problema. Espero que ayude…