2013-02-13 68 views
3

我有一個問題,當我使用下面的代碼從iPhone出來裝入相冊。雖然我裝得很完美,但第一張照片出現的是最古老的照片。是否有可能重新安排訂單,以便我可以先獲取最新的照片,然後是時間和最早的照片?如何顯示與排列相冊,從最新到最舊

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

回答

5

達到你想要什麼,你必須創建自己的使用資產庫框架的自定義照片選擇器。取決於您使用的ios版本,您可以使用UICollectionViewController(ios6以上版本)或者必須創建自己的版本。

要獲取已保存的照片相冊中的所有照片/資產,執行此方法,然後使用自己的創建日期,使用性質降序ALAssetPropertyDate

thisVC.assetArray將是您的自定義表中的數據源中的對象進行排序或集合視圖控制器。這兩種方法是異步的,所以你需要刷新的tableView或的CollectionView一旦數據源是完全

__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] == NSOrderedAscending ? NSOrderedDescending : NSOrderedAscending); 
       }]; 
       //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); 
     } 
    }]; 
} 

這部分寫在第一種方法將整理您的降序排列,

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

       return ([date1 compare:date2] == NSOrderedAscending ? NSOrderedDescending : NSOrderedAscending); 
}]; 

試試這個,如果你真的想:)

0

如圖所示here,你可以從UIImagePicker圖像的實際文件名。由於您似乎能夠按日期順序訪問它們,因此對此結果進行反向枚舉應該對您的問題進行排序。希望可以幫助...