6

カメラ ロールから PHAssets を取得するために、新しい PHFetchOptions の sortDescriptors を使用しています。並べ替えるキーは、creationDate と ModificationDate の 2 つだけのようですが、どちらも Photos.app に表示されるものと同じではありません。

何か不足していますか?どうすればこれを機能させることができますか?

4

4 に答える 4

7

次のコードを使用して、「カメラ ロール」を含むスマート アルバムのリストを取得しました。

// get the smart albums
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (NSInteger i = 0; i < smartAlbums.count; i++) {
    PHAssetCollection *assetCollection = smartAlbums[i];
    // Then use the following to get the photo images:
    PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil];
    }

デフォルトの並べ替え順序は、「カメラ ロール」を含むコレクション内のアセットの既存の順序です。オプションに「nil」を渡すと、デフォルトが取得されます。カメラ ロールの画像を並べ替えると、このコードに変更が反映されます。

于 2015-04-29T16:12:50.687 に答える
3

超簡単な解決策があります。

  1. 特定のオプションを指定せずにフェッチ結果を作成します。

    // ...
    
    let options = PHFetchOptions()
    fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: options)
    
    if fetchResult.count > 0 {
      collectionView.reloadData()
    }
    
    // ...
    
  2. 特定のアセットを読み込もうとするときは、逆インデックスを使用してください。

    // ...
    
    let reversedIndex = fetchResult.count - indexPath.item - 1
    let asset = fetchResult[reversedIndex] as! PHAsset
    
    // ...
    

そうすれば、Photo.app とまったく同じフロー順序が得られます。

お役に立てば幸いです。:]

于 2016-07-14T03:17:33.930 に答える