ASRobot

タイトルがロボットなのに関連する記事がほぼ無い備忘録です。

PhotoKitの使い方メモ

かなり前に, iPhone内の写真を使ったアプリを開発しようと思って, PhotoKitというライブラリを使っていたのですが, つい最近になって再び使おうとしたら殆ど忘れていたので, メモを書いていこうと思います.

※ここで示す例はシミュレータ環境で実行したものとなります.

Photokitのインポート

import Photos

PHAssetCollectionの取得

PHAssetCollectionはiOSのアルバムのオブジェクトみたいなものです.
このオブジェクトの中にアルバム名やアセットに関する情報が保存されています.

let smartAlbumData = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .albumRegular, options: nil)

smartAlbumData.enumerateObjects { (collection, index, _) in
    print(collection.localizedTitle!, PHAsset.fetchAssets(in: collection, options: nil).count)
}

【実行結果】 =>
Favorites 0
Recently Deleted 0
Panoramas 0
Camera Roll 5
Slo-mo 0
Screenshots 0
Bursts 0
Videos 0
Selfies 0
Hidden 0
Time-lapse 0
Recently Added 0
Live Photos 0
Long Exposure 0
Animated 0
Portrait 0

各アルバムに含まれている写真の枚数を調べようとしたら, PHAssetCollectionクラスにそれらしき関数がなかったので, 先程の例のようにPHAssetCollectionを使ってPHAssetをフェッチして, その配列の数を数えるようにしたら良い感じに枚数を取得できました.

PHAsset.fetchAssets(in: collection, options: nil).count

また, 先程の例では.smartAlbumの取得を行っていました.
この.smartAlbumというのは, システム側(iOS)側が作成したアルバムのみを取得するというオプションです. つまり, カメラロールやポートレートなどのアルバムが取得できるということになります.
そのため, ユーザが作成したアルバムなども取得したい場合は.albumオプションを使用して, PHAssetCollectionをフェッチする必要があります.
※ 事前にTestAlbumというアルバムを作成して, 適当な画像を1枚入れました.

albumData = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: nil)

albumData.enumerateObjects { (collection, index, _) in
    print(collection.localizedTitle!, PHAsset.fetchAssets(in: collection, options: nil).count)
}

【実行結果】 =>
TestAlbum 1