Photokit保留用户专辑列表顺序

时间:2015-06-11 02:16:08

标签: ios objective-c photokit photosframework

有没有办法保留用户在照片应用中排列所有相册的列表顺序?我一直在努力解决这个问题,而且我似乎无法弄清楚我缺少什么来保留在我的应用程序中显示的顺序。

我想保留订单,因为用户可以在照片应用中重新排列他们的相册,所以我希望我的UI与列表顺序相匹配。

代码我用来设置列表:

PHFetchResult *smartAlbumFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:
PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];

PHFetchResult *albumFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:
PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:nil];

NSArray *collectionFetches = @[smartAlbumFetchResult, albumFetchResult];

NSMutableArray *albumArray = [NSMutableArray new];

for (PHFetchResult *newFetch in collectionFetches)
{
    for (PHAssetCollection *sub in newFetch)
    {
        [albumArray addObject:sub];
         // Other setup omitted
    }
}

2 个答案:

答案 0 :(得分:2)

很抱歉,但我认为实际上并不可能(我希望在一些升级中) 实际上,可以使用PHFetchOptions对资产集合进行排序,但PhotoKit仅支持谓词和sortDescriptors属性的一组受限密钥(请参阅PHFetchOptions),在这些内容之间我看不到密钥。用户在照片应用中排列的列表顺序。

答案 1 :(得分:0)

您是否可以在PHAssetCollection类中创建一个属性,该类将订单考虑在内?这样你就可以根据属性显示它们了。

一个非常简单的例子,如果类包含1 - n的数字,根据该数字你知道要显示哪个类/照片?(或者根据该属性对它们进行排序,你可以在排序后循环它。 )

@Edit 简单的例子:

在.h文件的PHAssetCollection类中,您声明了一个属性。

@property (retain, nonatomic) NSInteger id;

在.m文件的类PHAssetCollection中,您可以在初始化方法中填充它。如果你想在.m文件中使用他,你必须合成他。您可以选择根据自己的需要随时随地选择填写。我可以想象他们获得了一个标准ID,当用户拖动照片时,它会在其上设置一个新ID。

您可以根据以下内容对列表进行排序,实现比较方法并调用比较功能:

//Implement
- (NSComparisonResult)compare:(PHAssetCollection *)otherPhoto{
    return [self.id compare:otherPhoto.id];
}

//Call method
NSMutableArray *sortedArray;
sortedArray = [sub sortedArrayUsingSelector:@selector(compare:)];

有很多方法可以实现它。另一个更复杂的是跟踪后台的顺序,而不是每次更改订单时都更改ID。调用ApplicationWillTerminate或ApplicationDidEnterBackground时,您可以根据照片的顺序更改照片的ID。这样,您只需要更改一次ID,这样可以节省一些性能。