UIImagePickerControllerで写真を撮る
iPhoneで写真を取るときはUIImagePickerViewControllerを使用する。
new->project->SingleView Applicationで、
ViewController.h
#import <UIKit/UIKit.h> #import <MobileCoreServices/MobileCoreServices.h> @interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationBarDelegate> -(IBAction)ibShowCameraView:(id)sender; -(IBAction)ibShowPhotosAlbum:(id)sender; @end
ViewController.m
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void)ibShowCameraView:(id)sender{ BOOL cam = [self startCameraControllerFromViewController:self usingDelegate:self]; if(cam) NSLog(@"camera"); else NSLog(@"not camera"); } -(BOOL)startCameraControllerFromViewController: (UIViewController*)controller usingDelegate:(id<UIImagePickerControllerDelegate, UINavigationBarDelegate>) delegate{ if(([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == NO) || delegate == nil || controller == nil){ return NO; } UIImagePickerController* cameraUI = [[UIImagePickerController alloc] init]; cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; cameraUI.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera]; cameraUI.allowsEditing = NO; cameraUI.delegate = delegate; [controller presentModalViewController:cameraUI animated:YES]; return YES; } // uiimagepicker delegates -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ NSLog(@"picker cancel"); [self dismissModalViewControllerAnimated:YES]; /* [[picker presentedViewController] dismissModalViewControllerAnimated:YES]; [picker release]; */ } -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType]; UIImage *originalImage, *editedImage, *imageToSave; // 静止画像のキャプチャを処理する if(CFStringCompare((CFStringRef)mediaType, kUTTypeImage, 0) == kCFCompareEqualTo){ editedImage = (UIImage*)[info objectForKey:UIImagePickerControllerEditedImage]; originalImage = (UIImage*)[info objectForKey:UIImagePickerControllerOriginalImage]; if(editedImage) imageToSave = editedImage; else imageToSave = originalImage; //オリジナルまたは加工済みの新規画像をカメラロールに保存する UIImageWriteToSavedPhotosAlbum(imageToSave, nil, nil, nil); NSLog(@"camera save"); } //ムービーを保存 if(CFStringCompare((CFStringRef)mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo){ NSString* moviePath = [[info objectForKey:UIImagePickerControllerMediaURL] path]; if(UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(moviePath)){ UISaveVideoAtPathToSavedPhotosAlbum(moviePath, nil, nil, nil); NSLog(@"movie save"); } } [self dismissModalViewControllerAnimated:YES]; /* [[picker presentedViewController] dismissModalViewControllerAnimated:YES]; [picker release]; */ } @end
ViewController.xib
UIButtonなんかを追加して、File's OwnerのShow the Connections InspectorでReceived ActionsのibShowCameraViewとUIButtonを接続。Touch Up Insideを選択。
ちなみにiOSプログラミングトピックスに載ってるコードをそのまま流用すると、Received memory warningとか出ます。なんででしょ。
iOSプログラミングトピックス
- 作者: 所友太,京セラコミュニケーションシステム株式会社
- 出版社/メーカー: リックテレコム
- 発売日: 2010/01/12
- メディア: 単行本
- 購入: 25人 クリック: 329回
- この商品を含むブログ (42件) を見る