[iOS 8] PhotoKit 3 – Photos Framework – モデルオブジェクトのプロパティの編集
はじめに
今回はモデルオブジェクトの編集を扱います。
Photos Frameworkのモデルオブジェクトはメタデータだけ保持し、メタデータを取得するためのプロパティは読み取り専用になっています。 プロパティやコンテンツ(写真やビデオの実データ)の編集は、編集作業用のオブジェクトを使って行います。
PHAssetのプロパティの編集
変更可能なプロパティには以下のようなものがあります
- favorite (お気に入り登録済みかどうか、BOOL)
- location (場所、CLLocation)
- creationDate (作成日、NSDate)
今回はfavoriteプロパティの編集を行ってみます。
Assetを編集するにはまず、そのAssetが編集処理をサポートしているかを、 PHAssetクラスのcanPerformEditOperation:メソッドを使用して問い合わせます。 編集処理がサポートされていたら PHPhotoLibraryクラスのperformChanges:completionHandler:メソッドの 1つ目の引数のblock内に編集処理を記述します。 (PHPhotoLibraryはPhoto libraryを表すオブジェクトで、sharedPhotoLibraryメソッドでユーザーのPhoto libraryを取得できます。) 今回はfavoriteプロパティの編集を行うので、 PHAssetChangeRequestを作成し、favoriteプロパティの変更を指定します。
処理完了時の処理は、performChanges:completionHandler:メソッドの2つめのblockに記述します。
// 編集処理がサポートされているかを問い合わせる // 引数にPHAssetEditOperationPropertiesを指定 if ([self.asset canPerformEditOperation:PHAssetEditOperationProperties]) { // Assetの編集を実行 [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ // PHAssetChangeRequestを作成、favoriteプロパティの変更を指定 PHAssetChangeRequest *request = [PHAssetChangeRequest changeRequestForAsset:self.asset]; [request setFavorite:![self.asset isFavorite]]; NSLog(@"%s setFavorite %@", __PRETTY_FUNCTION__, ([self.asset isFavorite] ? @"YES to NO": @"NO to YES")); } completionHandler:^(BOOL success, NSError *error) { if (!success) { NSLog(@"%s setFavorite Error: %@", __PRETTY_FUNCTION__, error); } else { NSLog(@"%s setFavorite success", __PRETTY_FUNCTION__); } }]; }
今回登場したクラスやメソッド
PHAsset
- canPerformEditOperation:
- 編集処理をサポートしているかどうかを返す
PHPhotoLibrary
- Photo libraryを表すオブジェクト
- sharedPhotoLibraryメソッドでユーザーのPhoto libraryを取得可能
- Photos appによって管理されている全てのcollection/assetを含む
- 端末内/iCloud上のcollection/assetオブジェクトを含む
- 編集を実行するためのメソッドが用意されている
- できることの例:
- assetのメタデータやコンテンツの編集
- 新しいassetの追加
- collectionの構成の編集
- できることの例:
PHAssetChangeRequest
- PHPhotoLibraryクラスの変更メソッドのblock内で使用
- PHAssetオブジェクトの作成、削除、編集時に使用
- 変更可能なプロパティ
- creationDate
- location
- favorite
- hidden
PHCollectionListやPHAssetCollectionのプロパティの編集
PHCollectionListやPHAssetCollectionに関しても編集用のメソッドが用意されています。
PHCollection (PHCollectionList/PHAssetCollectionのスーパークラス)
クラス名 | メソッド | 内容 |
---|---|---|
PHCollection | - canPerformEditOperation: | 編集処理がサポートされているかどうかを返す |
PHCollectionList
クラス名 | メソッド | 内容 |
---|---|---|
PHAssetCollectionChangeRequest | changeRequestForAssetCollection: | PHAssetCollection編集用のリクエストを作成 |
プロパティ名 | 内容 |
---|---|
title | collection listの表示名 |
PHAssetCollection
メソッド名 | 内容 |
---|---|
+ changeRequestForAssetCollection: | PHAssetCollection編集用のリクエストを作成 |
プロパティ名 | 内容 |
---|---|
title | asset collectionの表示名 |
まとめ
今回はモデルオブジェクトのプロパティの編集について説明しました。次回はモデルオブジェクトのコンテンツ自体の編集をやってみたいと思います。
参考資料
- 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の実装 (後篇)