2012年12月07日

ALAssetsLibraryを使う(1)

アルバムに写真を追加する

ALAssetsLibraryを使うと、写真アプリから写真やムービーを取得することができます。また、オリジナルのアルバムに画像を追加することもできます。


ALAssetsLibraryフレームワークでは、アセットという概念を使います。



● 準備作業

AssetsLibrary.frameworkを追加して、<AssetsLibrary/AssetsLibrary.h>をインポートします。

● ALAssetsLibraryインスタンスの作成

まず最初に、ALAssetsLibraryインスタンスを作成します。

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

● ALAssetsGroup(アルバム)の追加

ALAssetsGroup(アルバム)の追加は、「addAssetsGroupAlbumWithName: resultBlock: failureBlock:」を使用します。

                                   
    //新しいアルバムを追加
    [library addAssetsGroupAlbumWithName:@"任意のアルバム名"
        resultBlock:^(ALAssetsGroup *group) {

            //アルバムの追加完了後の処理をここに書く

        } failureBlock: nil];

● ALAssetsGroupにALAssetを追加

ALAssetsGroupにALAsset(写真)を追加するのは「addAsset:」です。

                                    
    [group addAsset:asset];

追加するALAsset(写真など)を取得する必要があるので、今回はUIIMagePickerControllerを使って取得します。

● UIImagePickerControllerを使ったALAssetの取得方法

写真選択時に呼ばれるデリゲートメソッドで撮影された写真を取得し、ALAssetLibraryのメソッドの「writeImageToSavedPhotosAlbum: orientation: completionBlock:」を使ってALAssetのURLが取得できれば、「assetForURL: resultBlock: failureBlock:」を使ってALAssetを取り出すことができます。

    
//写真選択時に呼ばれるデリゲートメソッド
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];

    //カメラロールにUIImageを保存する。保存完了後、completionBlockで「NSURL* assetURL」が取得できる
    [library writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation
        completionBlock:^(NSURL* assetURL, NSError* error) {

                //アルバムにALAssetを追加する任意のメソッド
                [self addAssetURL:assetURL
                    AlbumURL:groupURL];
                }];
}

//アルバムにALAssetを追加する任意のメソッド
- (void)addAssetURL:(NSURL*)assetURL AlbumURL:(NSURL *)albumURL
{
    //URLからGroupを取得
    [library groupForURL:albumURL
        resultBlock:^(ALAssetsGroup *group){

            //URLからALAssetを取得  
            [library assetForURL:assetURL
                resultBlock:^(ALAsset *asset) {
                
                //GroupにAssetを追加                         
                [group addAsset:asset];
                                               
            } failureBlock: nil];
        } failureBlock:nil];
}

ソースコードは、こちらにまとめました。

  • このエントリーをはてなブックマークに追加
前の記事へ

UITabBarのデザインを変更する

次の記事へ

ALAssetsLibraryを使う(2)