Photos.framework でカメラロールを取得する
Photos.framework でカメラロールを取得する方法が分かり辛かったので備忘
fetchAssetCollectionsWithType:subtype:options: メソッドの引数の type で
PHAssetCollectionTypeAlbum を指定した場合、写真アプリで作成したものとiTunesで同期したアルバムの一覧が取得できる。
PHAssetCollectionTypeSmartAlbum ではバースト、カメラロール、最後に追加した項目などのシステム作成のアルバム一覧が取得できる。
PHAssetCollectionTypeMoment では時間と位置情報にもとづくグループ(モーメント)が取得できる。
写真アプリの「アルバム」タブにはバースト、カメラロール、人々、自分で作成したアルバムとフォルダ等々がまとめて表示されているので、PHAssetCollectionTypeAlbum と PHAssetCollectionTypeSmartAlbum の混合が表示されている事になる。「アルバム」という名称に惑わされてこの点がちょっと分かり辛かった。
PHAssetCollectionTypeSmartAlbum で利用可能な subtype は以下のようになる。
| PHAssetCollectionSubtype | localizedTitle | Available iOS |
|---|---|---|
| PHAssetCollectionSubtypeSmartAlbumGeneric | *1 | |
| PHAssetCollectionSubtypeSmartAlbumPanoramas | パノラマ | |
| PHAssetCollectionSubtypeSmartAlbumVideos | ビデオ | |
| PHAssetCollectionSubtypeSmartAlbumFavorites | お気に入り | |
| PHAssetCollectionSubtypeSmartAlbumTimelapses | タイムラプス | |
| PHAssetCollectionSubtypeSmartAlbumAllHidden | 非表示 | |
| PHAssetCollectionSubtypeSmartAlbumRecentlyAdded | 最後に追加した項目 | |
| PHAssetCollectionSubtypeSmartAlbumBursts | バースト | |
| PHAssetCollectionSubtypeSmartAlbumSlomoVideos | スローモーション | |
| PHAssetCollectionSubtypeSmartAlbumUserLibrary | カメラロール*2 | |
| PHAssetCollectionSubtypeSmartAlbumSelfPortraits | セルフィー | 9.0 |
| PHAssetCollectionSubtypeSmartAlbumScreenshots | スクリーンショット | 9.0 |
| PHAssetCollectionSubtypeSmartAlbumDepthEffect | ポートレート | 10.2 |
| PHAssetCollectionSubtypeSmartAlbumLivePhotos | Live Photos | 10.3 |
| PHAssetCollectionSubtypeSmartAlbumAnimated | アニメーション | 11.0 |
| PHAssetCollectionSubtypeSmartAlbumLongExposures | 長時間露光 | 11.0 |
*1:ドキュメントには A smart album of no more specific subtype. This subtype applies to smart albums synced to the device from iPhoto. との記載があるが、iPhoto から同期したスマートアルバムは PHAssetCollectionTypeAlbum と PHAssetCollectionSubtypeAlbumSyncedAlbum の組み合わせで取得できるようになっていて、PHAssetCollectionSubtypeSmartAlbumGeneric では取得できない。
*2:iCloud フォトライブラリを利用時は「カメラロール」ではなく「すべての写真」となる