写真アルバム

Tatsuro Ueda edited this page Mar 13, 2014 · 4 revisions

写真アルバムを表示するためのソースコード。

    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    if ( [UIImagePickerController isSourceTypeAvailable:sourceType] ) {
        UIImagePickerController* picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;
        picker.sourceType = sourceType;
        [self presentViewController:picker animated:YES completion:nil];
    }

souceTypeプロパティに指定できる定数一覧

UIImagePickerControllerSourceType 役割
UIImagePickerControllerSourceTypePhotoLibrary 写真アルバムから写真を選択する画面を開く
UIImagePickerControllerSourceTypeCamera カメラを起動して写真を撮る画面を開く
UIImagePickerControllerSourceTypeSavedPhotosAlbum 保存した写真の一覧(カメラ対応デバイスならフォトライブラリ)を直接開く

UIImagePickerControllerを表示するためのメソッドだが、UIImagePickerController自体がUINavigationControllerのサブクラスであるため、UINavigationControllerのpushViewController:animated:メソッドは使えない。すでにUINavigationControllerの管理下にある場合は、presentController:animated:completion:メソッドでUIImagePickerControllerをモーダル表示するのが一般的だ。

また、写真アルバムを表示し、ユーザが写真を選択すると、delegateプロパティに設定したデリゲートに対してimagePickerController:didFinishPickingMediaWithInfo:メソッドで通知される。選択された写真はinfo(NSDictionary)からUIImagePickerControllerOriginalImageをキーにして、UIImageのインスタンスとして取得できる。

- (void) imagePickerController:(UIImagePickerController*)picker
 didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // 選択(or撮影)した写真を取得
    UIImage* image = info[UIImagePickerControllerOriginalImage];
    self.imageView.image = image;
    // 写真アルバムを閉じる
    [self dismissViewControllerAnimated:YES completion:nil];
}

また、必要ならimagePickerControllerDidCancel:メソッドで写真選択のキャンセルも検知可能である。

- (void) imagePickerControllerDidCancel:(UIImagePickerController*)picker
{
    // キャンセルされたときにおこなうべき処理をし、そのあと写真アルバムを閉じる
    [self dismissViewControllerAnimated:YES completion:nil];
}