iPhone/iPadで写真撮影・保存・読込が出来るアプリ


iPhone/iPadで写真の撮影・保存・読込が出来るアプリを作って見ました。iOS5.0以降で、ARCを有効にして作成しています。

画像ピッカーの表示

写真を撮影する処理と、ライブラリから読み込む処理は、sourceTypeが違うだけで、基本的には同一です。

sourceTypeに渡す値

  • UIImagePickerControllerSourceTypeCamera : 写真を撮影
  • UIImagePickerControllerSourceTypePhotoLibrary : ライブラリから読込
    UIImagePickerController* picker = [[UIImagePickerController alloc] init];
    picker.sourceType = sourceType;
    picker.delegate = self;

    ピッカーを表示

    iPhoneならモーダルビューとして、iPadならポップオーバーコントロールとして表示します。popoverCtlはヘッダで宣言しています。

    if([[UIDevice currentDevice].model rangeOfString:@"iPad"].location == NSNotFound){//iPhone
        [self presentModalViewController:picker animated:YES];
    }else{//iPad
        UIButton * button = [[self.view subviews] objectAtIndex:1];
        popoverCtl = [[UIPopoverController alloc] initWithContentViewController:picker];
        [popoverCtl presentPopoverFromRect:[button bounds] inView:button permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }

    ピッカーからの戻り値(画像)を処理

    写真を撮影した場合は、1番目のメソッドが、キャンセルした場合は2番目のメソッドが実行されます。

    -(void)imagePickerController: (UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{//selected
        UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
        [_imageView setImage:image];
        [self dismissModalViewControllerAnimated:YES];//iPhone
        [popoverCtl dismissPopoverAnimated:YES];//iPad
    }
    -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{//canceled
        [self dismissModalViewControllerAnimated:YES];//iPhone
    }

    画像をライブラリに保存

    UIImageViewからUIImageを取り出し、アルバムに保存しています。

    UIImage *image = [_imageView image];
    if(image == nil){
        [self showAlert:@"" text:@"保存する画像がありません。"];
        return;
    }
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(finishExport:didFinishSavingWithError:contextInfo:), NULL);

    プロジェクト

    プロジェクトをダウンロードしてお試し下さい。iPhoneとiPadの両方に対応しています。iOS5以降で、ARCを有効にしています。

    ダウンロード: Camera

    Comments

    comments

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です