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];
結構大変ですね。