カメラ ロールから PHAssets を取得するために、新しい PHFetchOptions の sortDescriptors を使用しています。並べ替えるキーは、creationDate と ModificationDate の 2 つだけのようですが、どちらも Photos.app に表示されるものと同じではありません。
何か不足していますか?どうすればこれを機能させることができますか?
カメラ ロールから PHAssets を取得するために、新しい PHFetchOptions の sortDescriptors を使用しています。並べ替えるキーは、creationDate と ModificationDate の 2 つだけのようですが、どちらも Photos.app に表示されるものと同じではありません。
何か不足していますか?どうすればこれを機能させることができますか?
次のコードを使用して、「カメラ ロール」を含むスマート アルバムのリストを取得しました。
// 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」を渡すと、デフォルトが取得されます。カメラ ロールの画像を並べ替えると、このコードに変更が反映されます。
超簡単な解決策があります。
特定のオプションを指定せずにフェッチ結果を作成します。
// ...
let options = PHFetchOptions()
fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: options)
if fetchResult.count > 0 {
collectionView.reloadData()
}
// ...
特定のアセットを読み込もうとするときは、逆インデックスを使用してください。
// ...
let reversedIndex = fetchResult.count - indexPath.item - 1
let asset = fetchResult[reversedIndex] as! PHAsset
// ...
そうすれば、Photo.app とまったく同じフロー順序が得られます。
お役に立てば幸いです。:]