使用PhotoKit将照片与本机photoapp排序完全相同

时间:2015-07-29 09:40:49

标签: ios sorting photokit phasset

我正在尝试使用Photos框架重现原生iOS8 photopicker。我的排序有问题。

让我说我做了以下事情:

  1. 我在Camera + app中编辑照片并将其保存回图库。
  2. 我最喜欢的另一张照片。
  3. 在原生的photopicker中:

    • 所有照片(即使是我喜欢的照片)也会按creationDate
    • 排序
    • 我编辑和保存的照片将在底部显示,因为它是我更改的最后一张照片。原件将根据其创建日期在其原始位置。

    在我的应用程序中,我执行以下操作:

    PHFetchOptions *options = [PHFetchOptions new];
    options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
    options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeImage];
    PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:self.assetCollection options:options];
    

    我在creationDate中排序并得到以下结果:

    • 所有照片(即使是我喜欢的照片)也会按creationDate
    • 排序
    • 我编辑的照片将根据其原始创作日期之后的原始照片。

    然后我更改了我的查询,而不是在creationDate上排序,我对modificationDate进行排序。我得到以下结果:

    • 所有照片通常与creationDate
    • 几乎相同
    • 我编辑的照片将位于底部。这就是我想要和喜欢的本机应用程序。
    • 最喜欢的照片也会在底部: - (

    所以看来Apple改变了modificationDate最喜欢的动作,也可能改变其他类型的动作,这搞乱了照片的分类。

    如何才能准确地获得Apple在其原生应用中使用的排序?也许聪明地使用NSSortDescriptor

5 个答案:

答案 0 :(得分:5)

正如@knutigro所提到的,解决方案是使用<iframe allowfullscreen> 和默认选项,即为PHFetchResult参数传递nil

options

但下一步是撤消排序结果,以便最新的图像是第一个。在PHFetchResult中没有一种简单的方法来反转结果,所以我使用了以下方法:

var fetchResult: PHFetchResult!

override func viewDidLoad() {
    super.viewDidLoad()

    fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
}

答案 1 :(得分:5)

swift 3

let fetchOptions = PHFetchOptions()
    let sortOrder = [NSSortDescriptor(key: "creationDate", ascending: false)]
    fetchOptions.sortDescriptors = sortOrder

答案 2 :(得分:4)

我刚刚发现要复制原生photopicker的确切行为,sollution是删除我的自定义sortDescriptior,只使用默认行为PHFetchResult。在发现之后,它现在显而易见。

答案 3 :(得分:2)

您可以尝试使用两种排序描述符:

NSSortDescriptor sortDesc1 = [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; 

NSSortDescriptor sortDesc2 = [NSSortDescriptor sortDescriptorWithKey:@"modificationDate" ascending:NO]];     

options.sortDescriptors = @[sortDesc1, sortDesc2];

Haven未经测试,只是认为它可能有用。

答案 4 :(得分:0)

不要问我为什么和怎么做,但是当我设置排序说明时。它的工作方式类似于“照片”应用程序(最近)。

        [options setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"burstIdentifier" ascending:NO]]];

尝试一下。