[objective-c]Camera
iPhone Apps「魚眼フォト」などで使っている方法です。
カメラ、アルバムから画像を取得する時こうします。
まずデリゲートメソッド使用のためのの設定
下記の例だと「CameraViewController.h」にこれを記述する。
@protocol UIImagePickerControllerDelegate; @protocol UINavigationControllerDelegate; @interface CameraViewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate>
そして、なんやかんやの処理を「CameraViewController.m」へ
//カメラ、アルバムから画像をもらった時 -(void)whenCameraDone:(UIImage*)omg{ } //アラートでok押したとき -(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ if (alertno==1) {//NoCamera [self whenCameraDone:nil]; }else if(alertno==2){//NoAlbum [self whenCameraDone:nil]; } } //カメラが使えないときのアラート -(void)alertNoCamera{ alertno=1; UIAlertView *al=[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"NoCamera", nil) message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil]; [al show]; [al release]; } -(void)takePhoto{ UIImagePickerControllerSourceType pst=UIImagePickerControllerSourceTypeCamera; if([UIImagePickerController isSourceTypeAvailable:pst]){ UIImagePickerController *pic=[[UIImagePickerController alloc]init]; pic.delegate=self; pic.sourceType=pst; [self presentModalViewController:pic animated:YES]; [pic release]; }else{ //カメラが使えないとき [self alertNoCamera]; } } //撮影,画像選択>使用時 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ UIImage *originalImage=[info objectForKey:UIImagePickerControllerOriginalImage]; [self dismissModalViewControllerAnimated:YES]; [self whenCameraDone:originalImage]; } //撮影キャンセル時 -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ //[self dismissViewControllerAnimated:YES]; [self dismissModalViewControllerAnimated:YES]; [self whenCameraDone:nil]; } //Albumが使えないときのアラート -(void)alertNoAlbum{ alertno=2; UIAlertView *al=[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"NoAlbum", nil) message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil]; [al show]; [al release]; } -(void)openAlbum{ UIImagePickerControllerSourceType pst=UIImagePickerControllerSourceTypePhotoLibrary; if([UIImagePickerController isSourceTypeAvailable:pst]){ UIImagePickerController *pic=[[UIImagePickerController alloc]init]; pic.delegate=self; pic.sourceType=pst; [self presentModalViewController:pic animated:YES]; [pic release]; }else{ //Albumが使えないとき [self alertNoAlbum]; } }
で使うときは下記のようにメソッドを実行する。
//カメラ [self takePhoto]; //アルバム [self openAlbum];
結構大変ですね。