Photokit 保存用户相册列表顺序

9

有没有办法保留用户在照片应用程序中排列所有相册的顺序?我一整天都在尝试解决这个问题,但似乎无法找到如何保留顺序以在我的应用程序中显示的内容。

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

我使用的代码来设置列表:

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个回答

5

很抱歉,我实际上认为这是不可能的(希望在某些升级中实现)。
事实上,可以使用PHFetchOptions来对资源集合进行排序,但是PhotoKit仅支持一组受限制的键用于谓词和sortDescriptors属性(请参见PHFetchOptions),而在这些键之间,我无法看到一个针对用户在“照片”应用程序中排列列表顺序的键。


-1

在 PHAssetCollection 类中,你不能创建一个考虑顺序的属性吗?这样你就可以根据该属性显示它们。

一个非常简单的例子,如果该类包含从 1 到 n 的数字,基于该数字,您就知道要显示哪个类/照片了吗?(或者根据该属性对它们进行排序,然后在排序后循环它们。)

@编辑 简单的例子:

在 .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,这将节省一些性能。


你的代码示例并不符合我发布的问题。如果你在iOS中使用照片应用程序并更改相册顺序,PHFetchResults将无法返回正确的顺序。此外,您无法修改PHAssetCollection。 - klcjr89
只是给出了一些指导并尝试解释这个想法,不会为你详细说明。 - Revils
这是一个很大的赏金,你甚至没有研究手头的问题。 - klcjr89
我不是为了赏金而来,只是想提供一些建议。 - Revils
@Silver2009 aviatorken89 问如何在他的应用程序中显示用户在iOS照片应用程序中选择的顺序,而不是用户在他的应用程序中设置的顺序。 - asclepix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接