如何以与iPhoto相同的方式订购ALAssetsGroup

时间:2014-03-23 21:28:26

标签: ios alassetslibrary

我可以通过ALAssetsGroupAlbum枚举并创建一个按照下面的专辑名称排序的NSMutableArray而不会出现问题。但是,我真正想做的是按照iPhone的照片应用程序的方式对相册进行排序,这是按照iPhoto上设置的手动顺序排列的,这可能不是按字母顺序排列的。我想知道Assets Library是否在某处保存了此订单信息。有谁知道Apple如何做到这一点?感谢。


ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {

    ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos];
    [group setAssetsFilter:onlyPhotosFilter];
    if ([group numberOfAssets] > 0)
    {
   //     [self.groups addObject:group];
        [self.groups insertObject:group atIndex:0];
    }
    else
    {
        //sort groups by name
          [self.groups sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
              return [[obj1 valueForProperty:ALAssetsGroupPropertyName] localizedCaseInsensitiveCompare:[obj2 valueForProperty:ALAssetsGroupPropertyName]];
          }];

        [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
    }

1 个答案:

答案 0 :(得分:1)

//这对我有用。这是一个Swift 2版本。 对任何财产排序。我使用了专辑名称。

var albums:[ALAssetsGroup] = []

//枚举以获取您的相册 。 。

func sortAndReloadAlbums()
{
    self.albums.sortInPlace({ (album1:ALAssetsGroup, album2:ALAssetsGroup) -> Bool in
        let album1Name: String = String(album1.valueForProperty(ALAssetsGroupPropertyName))
        let album2Name: String = String(album2.valueForProperty(ALAssetsGroupPropertyName))

        return album1Name < album2Name
    })

    self.tableView.reloadData()
}