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

Posted

技术标签:

【中文标题】如何以与 iPhoto 相同的方式订购 ALAssetsGroup【英文标题】:How to order ALAssetsGroup the same way iPhoto does 【发布时间】:2014-03-23 21:28:26 【问题描述】:

我可以通过 ALAssetsGroupAlbum 枚举并创建一个按专辑名称排序的 NSMutableArray,如下所示,没有问题。但是,我真正想做的是以与 iPhone 的照片应用程序相同的方式对相册进行排序,即遵循 iPhoto 上设置的手动顺序,这可能不是按字母顺序排列的。我想知道资产库是否在某处保存此订单信息。有谁知道苹果是如何做到这一点的?谢谢。


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];
    

【问题讨论】:

您好,我也希望以与 Photos.app 相同的顺序显示相册,有什么更新吗? 不幸的是,不是。而且,我也停止了寻找。我决定将它们分成几个部分,例如专辑、事件和面孔,并按字母顺序对它们进行排序。它看起来不太好,但我的目的可以接受。 好的,谢谢你的回答。 【参考方案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()

【讨论】:

以上是关于如何以与 iPhoto 相同的方式订购 ALAssetsGroup的主要内容,如果未能解决你的问题,请参考以下文章

如何以与 WhatsApp 相同的方式实施 APNS?

如何以与 np.where 相同的方式使用 Tensorflow.where?

如何以与“TABLE name;”相同的方式格式化 postgres 结果做?

如何以与 OpenGL 中的点精灵相同的方式渲染屏幕对齐的矩形

如何以与 toad 相同的方式在 PL/SQL 中导出数据库对象?

如何以与在 Windows 资源管理器中“发送给邮件收件人”相同的方式以编程方式发送电子邮件?