IOS有兩種的拍照和視頻的方式:1.直接使用UIImagePickerController,這個類提供了一個簡單便捷的拍照與選擇圖片庫裏圖片的功能。2.另一種是通過AVFoundation.framework框架完全自定義拍照的界面和選擇圖片庫界面。我只做了第一種,就先給大家介紹第一種做法:
一、首先調用接口前,我們需要先判斷當前設備是否支持UIImagePickerController,用isSourceTypeAvailable:來判斷是否可用
二、查看符合的媒體類型,這個時候我們調用availableMediaTypeForSourceType:判斷
在調用UIImagePickerController時我們需要加入他的兩個代理方法:
UINavigationControllerDelegate和UIImagePickerControllerDelegate,在調用攝像頭的時候還可以調閃光燈,一會代碼裏有。
在.m的- (void)viewDidLoad裏建立4Button,Camera調用相機、Library調用圖片庫、flashlight打開閃光燈、close關閉閃光燈
打開相機後,然後需要調用UIImagePickerControllerDelegate裏的方法,拍攝完成後執行的方法和點擊Cancel之後執行的方法:
接着介紹打開照片庫:
調用閃光燈的代碼
一、首先調用接口前,我們需要先判斷當前設備是否支持UIImagePickerController,用isSourceTypeAvailable:來判斷是否可用
二、查看符合的媒體類型,這個時候我們調用availableMediaTypeForSourceType:判斷
在調用UIImagePickerController時我們需要加入他的兩個代理方法:
UINavigationControllerDelegate和UIImagePickerControllerDelegate,在調用攝像頭的時候還可以調閃光燈,一會代碼裏有。
要調用閃光燈需要先建一個AVCaptureSession類的實例對象:
- #import <UIKit/UIKit.h>
- //調用閃光燈調用框架
- #import <AVFoundation/AVFoundation.h>
- @interface CameraViewController : UIViewController<UINavigationControllerDelegate, UIImagePickerControllerDelegate>
- {
- AVCaptureSession * _AVSession;//調用閃光燈的時候創建的類
- }
- @property(nonatomic,retain)AVCaptureSession * AVSession;
- @end
- //打開相機
- -(void)addCarema
- {
- //判斷是否可以打開相機,模擬器此功能無法使用
- if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
- UIImagePickerController * picker = [[UIImagePickerController alloc]init];
- picker.delegate = self;
- picker.allowsEditing = YES; //是否可編輯
- //攝像頭
- picker.sourceType = UIImagePickerControllerSourceTypeCamera;
- [self presentModalViewController:picker animated:YES];
- [picker release];
- }else{
- //如果沒有提示用戶
- UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"你沒有攝像頭" delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil];
- [alert show];
- }
- }
打開相機後,然後需要調用UIImagePickerControllerDelegate裏的方法,拍攝完成後執行的方法和點擊Cancel之後執行的方法:
- //拍攝完成後要執行的方法
- -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
- {
- //得到圖片
- UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage];
- //圖片存入相冊
- UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
- [self dismissModalViewControllerAnimated:YES];
- }
- //點擊Cancel按鈕後執行方法
- -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
- {
- [self dismissModalViewControllerAnimated:YES];
- }
接着介紹打開照片庫:
- -(void)openPicLibrary
- {
- //相冊是可以用模擬器打開的
- if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
- UIImagePickerController * picker = [[UIImagePickerController alloc]init];
- picker.delegate = self;
- picker.allowsEditing = YES;//是否可以編輯
- //打開相冊選擇照片
- picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
- [self presentModalViewController:picker animated:YES];
- [picker release];
- }else{
- UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"你沒有攝像頭" delegate:nil cancelButtonTitle:@"Drat!" otherButtonTitles:nil];
- [alert show];
- }
- }
- //選中圖片進入的代理方法
- -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
- {
- [self dismissModalViewControllerAnimated:YES];
- }
調用閃光燈的代碼
- -(void)openFlashlight
- {
- AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
- if (device.torchMode == AVCaptureTorchModeOff) {
- //Create an AV session
- AVCaptureSession * session = [[AVCaptureSession alloc]init];
- // Create device input and add to current session
- AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
- [session addInput:input];
- // Create video output and add to current session
- AVCaptureVideoDataOutput * output = [[AVCaptureVideoDataOutput alloc]init];
- [session addOutput:output];
- // Start session configuration
- [session beginConfiguration];
- [device lockForConfiguration:nil];
- // Set torch to on
- [device setTorchMode:AVCaptureTorchModeOn];
- [device unlockForConfiguration];
- [session commitConfiguration];
- // Start the session
- [session startRunning];
- // Keep the session around
- [self setAVSession:self.AVSession];
- [output release];
- }
- }
- -(void)closeFlashlight
- {
- [self.AVSession stopRunning];
- [self.AVSession release];
- }