今天給大家分享一下如何調用iphone的拍照功能和打開閃光燈,有些代碼我也不太理解,很多是在網上借鑒其他人的。IOS有兩種的拍照和視頻的方式:1.直接使用UIImagePickerController,這個類提供了一個簡單便捷的拍照與選擇圖片庫里圖片的功能。2.另一種是通過AVFoundation.framework框架完全自定義拍照的界面和選擇圖片庫界面。我只做了第一種,就先給大家介紹第一種做法:
一、首先調用接口前,我們需要先判斷當前設備是否支持UIImagePickerController,用isSourceTypeAvailable:來判斷是否可用
二、查看符合的媒體類型,這個時候我們調用availableMediaTypeForSourceType:判斷
在調用UIImagePickerController時我們需要加入他的兩個代理方法:
UINavigationControllerDelegate和UIImagePickerControllerDelegate,在調用攝像頭的時候還可以調閃光燈,一會代碼里有。
要調用閃光燈需要先建一個AVCaptureSession類的實例對象:
// // Created by 張茫原 on 13-1-23. // Copyright (c) 2013年 張茫原. All rights reserved. // #import <UIKit/UIKit.h> //調用閃光燈調用框架 #import <AVFoundation/AVFoundation.h> @interface CameraViewController : UIViewController<UINavigationControllerDelegate, UIImagePickerControllerDelegate> { AVCaptureSession * _AVSession;//調用閃光燈的時候創建的類 } @property(nonatomic,retain)AVCaptureSession * AVSession; @end
在.m的- (void)viewDidLoad里建立4Button,Camera調用相機、Library調用圖片庫、flashlight打開閃光燈、close關閉閃光燈,這里創建Button的代碼我就不再寫了。
//打開相機 -(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]; }
調用閃光燈的代碼,由於我也不是很理解,所以沒法加注釋,但是已經親測可用,但是調閃光燈時有一個算是bug吧,閃光燈會閑一下,然后再一直亮
-(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]; }