原文鏈接:點擊打開鏈接
1.UIImagePickerController的靜態方法:
imagepicker = [[UIImagePickerController alloc]init];
//UIImagePickerController靜態方法判斷設備是否支持照相機/圖片庫/相冊功能
/*
typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
UIImagePickerControllerSourceTypePhotoLibrary, UIImagePickerControllerSourceTypeCamera,
UIImagePickerControllerSourceTypeSavedPhotosAlbum }; */
BOOL isCameraSupport = [UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; NSLog(@"support camera:%d",isCameraSupport);
//UIImagePickerController靜態方法判斷設備是否支持前置攝像頭/後置攝像頭
/*
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
UIImagePickerControllerCameraDeviceRear, UIImagePickerControllerCameraDeviceFront }; */
BOOL isRearSupport = [UIImagePickerController
isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
NSLog(@"rear support:%d",isRearSupport);
//UIImagePickerController靜態方法判斷設備是否支持前置攝像
頭閃光燈/後置攝像頭閃光燈
/*
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
UIImagePickerControllerCameraDeviceRear, UIImagePickerControllerCameraDeviceFront }; */
BOOL isFlushSupport = [UIImagePickerController
isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear];
NSLog(@"rear flash support:%d",isFlushSupport);
//UIImagePickerController靜態方法返回前置攝像頭/後置攝像頭支持的拍攝類型
/*
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
UIImagePickerControllerCameraDeviceRear, UIImagePickerControllerCameraDeviceFront }; */
//返回類型有照片和視頻
/*
enum {
UIImagePickerControllerCameraCaptureModePhoto, UIImagePickerControllerCameraCaptureModeVideo };
typedef NSUInteger
UIImagePickerControllerCameraCaptureMode; */
NSArray* captureModes = [UIImagePickerController
availableCaptureModesForCameraDevice:UIImagePickerControllerC
ameraDeviceRear];
for (NSNumber* mode in captureModes) {
NSLog(@"capture modes:%d",[mode integerValue]); }
//UIImagePickerController靜態方法返回照相機/相冊/照片庫所支持的媒體類型
/*
typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
UIImagePickerControllerSourceTypePhotoLibrary, UIImagePickerControllerSourceTypeCamera,
UIImagePickerControllerSourceTypeSavedPhotosAlbum }; */
//返回類型有kUTTypeMovie,kUTTypeImage,其他類型均在<MobileCoreServices/MobileCoreServices.h>下
NSArray* mediaTypes = [UIImagePickerController
availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
for (NSString* type in mediaTypes) { NSLog(@"media types:%@",type); }
2.UIImagePickerController屬性詳解: //指定使用照相機模式,可以指定使用相冊/照片庫
imagepicker.sourceType =
UIImagePickerControllerSourceTypeCamera;
//設置當拍照完或在相冊選完照片後,是否跳到編輯模式進行圖片剪裁。只有當showsCameraControls屬性爲true時纔有效果
imagepicker.allowsEditing = YES;
//設置拍照時的下方的工具欄是否顯示,如果需要自定義拍攝界面,則可把該工具欄隱藏
imagepicker.showsCameraControls = YES; //設置使用後置攝像頭,可以使用前置攝像頭 imagepicker.cameraDevice =
UIImagePickerControllerCameraDeviceRear; //設置閃光燈模式
/*
typedef NS_ENUM(NSInteger,
UIImagePickerControllerCameraFlashMode) {
UIImagePickerControllerCameraFlashModeOff = -1, UIImagePickerControllerCameraFlashModeAuto = 0, UIImagePickerControllerCameraFlashModeOn = 1 }; */
imagepicker.cameraFlashMode =
UIImagePickerControllerCameraFlashModeAuto; //設置相機支持的類型,拍照和錄像
imagepicker.mediaTypes =
@[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie];
//設置拍攝時屏幕的view的transform屬性,可以實現旋轉,縮放功能
// imagepicker.cameraViewTransform =
CGAffineTransformMakeRotation(M_PI*45/180); // imagepicker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5);
//所有含有cameraXXX的屬性都必須要sourceType是
UIImagePickerControllerSourceTypeCamera時設置纔有效果,否則會有異常
//設置UIImagePickerController的代理 imagepicker.delegate = self; -(void)showCamera{
//用模態方式呈現imagepicker
[self presentModalViewController:imagepicker animated:YES]; }
使用 imagepicker.cameraViewTransform =
CGAffineTransformMakeRotation(M_PI*45/180);旋轉45度的效果: 使
用
imagepicker.cameraViewTransform
=
CGAffineTransformMakeScale(1.5, 1.5);全屏的效果,同時imagepicker.showsCameraControls =NO;隱藏工具欄:
使用imagepicker.allowsEditing = YES;出現的圖片編輯效果,只有當
imagepicker.showsCameraControls = YES;纔有效果: 使
用
imagepicker.mediaTypes
=
@[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie];支持拍照和視頻的前後對比效果:
3.UIImagePickerController回調詳解:
//成功獲得相片還是視頻後的回調
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
//通過UIImagePickerControllerMediaType判斷返回的是照片還是視頻
NSString* type = [info
objectForKey:UIImagePickerControllerMediaType];
//如果返回的type等於kUTTypeImage,代表返回的是照片,並且需要判斷當前相機使用的sourcetype是拍照還是相冊
if ([type
isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypeCamera) { //獲取照片的原圖
UIImage* original = [info
objectForKey:UIImagePickerControllerOriginalImage]; //獲取圖片裁剪的圖
UIImage* edit = [info
objectForKey:UIImagePickerControllerEditedImage]; //獲取圖片裁剪後,剩下的圖
UIImage* crop = [info
objectForKey:UIImagePickerControllerCropRect]; //獲取圖片的url
NSURL* url = [info
objectForKey:UIImagePickerControllerMediaURL]; //獲取圖片的metadata數據信息
NSDictionary* metadata = [info
objectForKey:UIImagePickerControllerMediaMetadata];
//如果是拍照的照片,則需要手動保存到本地,系統不會自動保存拍照成功後的照片
UIImageWriteToSavedPhotosAlbum(edit, self,
@selector(image:didFinishSavingWithError:contextInfo:), nil); }else{ }
//模態方式退出uiimagepickercontroller
[imagepicker dismissModalViewControllerAnimated:YES];
}
//取消照相機的回調
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
//模態方式退出uiimagepickercontroller
[imagepicker dismissModalViewControllerAnimated:YES]; }
//保存照片成功後的回調
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error
contextInfo:(void *)contextInfo{
NSLog(@"saved.."); }
4.自定義相機拍照畫面:
//設置拍照時的下方的工具欄是否顯示,如果需要自定義拍攝界面,
則可把該工具欄隱藏
imagepicker.showsCameraControls = NO;
UIToolbar* tool = [[UIToolbar alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-55, self.view.frame.size.width, 75)]; tool.barStyle = UIBarStyleBlackTranslucent; UIBarButtonItem* cancel = [[UIBarButtonItem
alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelCamera)];
UIBarButtonItem* add = [[UIBarButtonItem
alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(savePhoto)];
[tool setItems:[NSArray arrayWithObjects:cancel,add, nil]]; //把自定義的view設置到imagepickercontroller的overlay屬性中
imagepicker.cameraOverlayView = tool;
-(void)cancelCamera{
[imagepicker dismissModalViewControllerAnimated:YES]; }
-(void)savePhoto{ //拍照,會自動回調-
(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info,對於自定義照相機界面,拍照後回調可以不退出實現連續拍照效果 [imagepicker takePicture]; }
5.UIImagePickerController是繼承
UINavigationController,所以可以push和pop一些viewcontroller進行導航效果。例如,自定義照相機畫面的時候可以在拍攝完後push一個viewcontroller用於對照片進行編輯。