2012年5月24日

【iPhone】Camera Rollを実装してみた


カメラロールといえば、皆さんご存知のように、
[アルバム]→[サムネイル]
の順で選択してくるあの画面です。

iPhoneではAndroidと違い、アプリ間連携がありませんので、
iPhoneアプリ内で実装しなければいけません。

難しいかなぁと思っていたのですが、
UIImagePickerControllerを使い簡単に出来たので、
ソースコードをGitHubにアップしました。


参考:morodomi / ImagePickerController

解説しますと、
#pragma mark -
#pragma mark UIImagePickerControllerDelegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];
    // 成功の場合のブロックを作成
    ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    {
        // サムネイル画像のReferenceを作成
        CGImageRef thumbrefs = [myasset thumbnail];
        // あれば、XIBで作ったImageViewへ入れる
        if (thumbrefs) {
            UIImage *thumbnail = [UIImage imageWithCGImage:thumbrefs];
            [thumbView setImage:thumbnail];
        }
        // 拡大画像は下記方法で取得
        ALAssetRepresentation *representation = [myasset defaultRepresentation];
        UIImage *image = [UIImage imageWithCGImage:[representation fullResolutionImage]
                                           scale:[representation scale]
                                     orientation:[representation orientation]];
        [imageView setImage:image];
    };
    // 失敗した場合の処理
    ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
    {
        // とくに、位置情報サービスがOFFになっている場合、
        // 写真が取得出来無いので、位置情報サービスをONにして下さいという
        // アラームを出した方が良い。今回は実装していない。
        NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
    };

    if(imageURL) {
        ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
        [assetslibrary assetForURL:imageURL 
                       resultBlock:resultblock
                      failureBlock:failureblock];
    }
    [self dismissModalViewControllerAnimated:YES];
}

というような感じで、取得後のメソッドを書いてしまえば、
あとはGitHubのソースコードと大きな違いが無く実装出来るとおもいます。