[iOS 8] PhotoKit 1 – Photos frameworkの概要
はじめに
PhotoKitはPhotos FrameworkとPhotosUI Frameworkで構成され、写真やビデオを扱うための新しいAPIを提供します。
PhotoKit
- Photos Framework
- フォトライブラリの写真やビデオにアクセス
- 標準の写真アプリのようなフル機能の写真アプリを作成
- PhotosUI Framework
- 写真編集用のApp Extensionを作成
Appleの開発者向けドキュメントでは以下のように紹介されています。
PhotoKit では、iCloud の写真アセットを含め、「写真」アプリケーションで管理されている写真/ビデオアセットと連動する新しい API を利用できます。アプリケーションに事前に写真をインポートすることなく、カメラロール内の写真をアプリケーションから直接編集できます。PhotoKit は、サムネイルとフルサイズのアセットのフェッチやキャッシュ、アセットの変更リクエスト、その他のアプリケーションによって適用された変更内容の監視、再開可能なアセットコンテンツ編集に対応した、スレッドセーフなアーキテクチャを主な特徴としています。
Photos Framework
本記事ではPhotos Frameworkの概要について説明します。
Photos FrameworkはiOS 8で追加されたフレームワークであり、Assets Library Frameworkを置き換えるものです。 OS標準の「写真」アプリや「カメラ」アプリでも使われており、カスタムのイメージピッカーやフォトライブラリのブラウザ/エディタを作成などの用途に使用できます。
提供される機能
- 写真/ビデオ、アルバム、モーメントへのアクセス
- アセットやアルバムの追加や削除、編集
- 写真/ビデオのコンテンツやメタデータの編集
Photos API 概要
- モデルオブジェクト
- モデルオブジェクトの取得
- モデルオブジェクトの変更
- モデルオブジェクトの変更のハンドリング
- 写真・ビデオ
- 写真/ビデオコンテンツを取得
- コンテンツを編集
Photos Frameworkの特徴
アセットデータの取得/変更を要求できる
- Photos Frameworkで定義されているモデルオブジェクトは読み取り専用・イミュータブルであり、メタデータのみ含む
- アセットやコレクションを扱うには、モデルオブジェクトをフェッチする
- オブジェクトを変更するには、変更要求オブジェクトを作成し、PHPhotoLibraryへ明示的にコミットする
- 複数のスレッド・アプリ・エクステンションから、簡単、安全、効率的に、同じアセットを操作することができる
データの変更を監視できる
- 共用のPHPhotoLibraryオブジェクトを使用して、モデルオブジェクト用の変更ハンドラを登録することができる
- アセットやコレクション内のメタデータ/コンテンツが、他のアプリや他端末で変更される度に、変更の通知を受け取ることができる
- PHChangeオブジェクトが変更前/変更後のオブジェクトの状態の情報を提供するので、アプリのビューの更新が簡単になる
「写真」アプリと同様の機能を利用できる
- PHCollectionListクラスを使用して、「写真」アプリ上のMoments階層に対応するアセットを見つけることができる
- PHAssetクラスを使用して、バースト写真やパノラマ写真、高フレームレートの動画を識別できる
- iCloudフォトライブラリが有効な場合
- Photos Frameworkで扱えるアセットやコレクションには、同じiCloudのアカウント上のすべてのデバイス間で利用可能なコンテンツが含まれる
アセットやサムネイルのロード/キャッシュ
- PHImageManagerクラスを使用して、指定サイズの画像や、AV Foundationオブジェクトなどをリクエストできる
- Photos Frameworkは自動的に、画像をダウンロードしたり、目的にあった画像を生成したり、再利用のためにキャッシュを生成したりする
- 大量のアセットを扱う場合、PHCachingImageManagerの先読みを使用することで、処理を高速にできる
アセットの編集
- 写真やビデオを編集し、変更をフォトライブラリへコミットするためのメソッドが、PHAssetとPHAssetChangeRequestクラスに定義されている
- 異なるアプリやエクステンション間で編集の連続性をサポートするために、「写真」アプリは各アセットのバージョン情報を保持する
- PHAdjustmentDataオブジェクトを使用して、最新の編集についての記述を保持する
モデルオブジェクト
Photos Frameworkで定義されているモデルオブジェクトは、ライブラリーの構造を表すためのクラスです。 読み取り専用・イミュータブルであり、メタデータのみ含みます。(画像やビデオ自体を取得するにはPHImageManagerクラスを使用します) また、スレッドセーフになっており、複数のスレッド・アプリ・エクステンションから、安全に同じアセットを操作することができます。
モデルオブジェクトには以下のようなものがあります。
Assets
- ライブラリの中の写真やビデオに相当する
- PHAssetクラス
- Media type
- Creation date
- Location
- Favorite
Asset Collections
- 順序付けられたAssetのコレクション
- Albums, moments, and smart albumsなど
- PHAssetCollectionクラス
- Type
- Title
- Start and end date
Collection Lists
- コレクションのグループ
- ユーザーが作成したFolder, moment yearなど
- PHCollectionListクラス
- Type
- Title
- Start and end date
まとめ
今回はPhotos Frameworkの概要について説明しました。次回はモデルオブジェクトの取得をやってみたいと思います。
参考資料
- Photos Framework Reference
- Introducing the Photos Frameworks - WWDC 2014 Session Videos
本シリーズの記事一覧
- [iOS 8] PhotoKit 1 – Photos Frameworkの概要
- [iOS 8] PhotoKit 2 – Photos Framework – モデルオブジェクトの取得
- [iOS 8] PhotoKit 3 – Photos Framework – モデルオブジェクトのプロパティの編集
- [iOS 8] PhotoKit 4 – Photos Framework – モデルオブジェクトのコンテンツの編集
- [iOS 8] PhotoKit 5 – Photos Framework – モデルオブジェクトの削除
- [iOS 8] PhotoKit 6 – Photos Framework – モデルの変更のハンドリングとコンテンツ編集のrevert
- [iOS 8] PhotoKit 7 – Photos Framework – フォトライブラリへのアクセス許可を得る
- [iOS 8] PhotoKit 8 - UIImagePickerControllerとPhotos Frameworkを組み合わせて使う
- [iOS 8] PhotoKit 9 – Photo Editing Extensionの概要
- [iOS 8] PhotoKit 10 – Photo Editing Extensionの実装 (前篇)
- [iOS 8] PhotoKit 11 – Photo Editing Extensionの実装 (後篇)