導(dǎo)入系統(tǒng)庫以方便獲取媒體類型常量
#import <MobileCoreServices/UTCoreTypes.h>
檢查相機(jī)是否可用
#pragma mark - 檢查相機(jī)是否可用
-(void)isCameraAvail
{
BOOL isAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
if (isAvailable) {
NSLog(@"相機(jī)可用");
} else {
NSLog(@"相機(jī)不可用 ");
}
}
檢查攝像頭是否可用
#pragma mark - 檢查攝像頭是否可用
-(void)isCameraFront
{
/*
UIImagePickerControllerCameraDeviceFront 前置攝像頭
UIImagePickerControllerCameraDeviceRear 后置攝像頭
*/
BOOL isAvailable = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
if (isAvailable) {
NSLog(@"攝像頭可用");
} else {
NSLog(@"攝像頭不可用");
}
}
檢查閃光燈是否可用
#pragma mark - 檢查閃光燈是否可用
-(void)isFlashAvailable
{
/*
UIImagePickerControllerCameraDeviceFront 前置攝像頭
UIImagePickerControllerCameraDeviceRear 后置攝像頭
*/
BOOL isAvailable = [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceFront];
if (isAvailable) {
NSLog(@"閃光燈可用");
} else {
NSLog(@"閃光燈不可用");
}
}
支持的媒體類型
#pragma mark - 支持的媒體類型
-(void)cameraSupportMedia
{
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
for (NSString *type in mediaTypes) {
/*
public.image
public.movie
*/
NSLog(@"type - %@",type);
}
}
調(diào)用相機(jī) (其中有將圖片保存到手機(jī))
-(void)configCamera
{
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
controller.sourceType = UIImagePickerControllerSourceTypeCamera;
NSString *mediaType = (__bridge NSString *)kUTTypeImage;
controller.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera]; // @[mediaType]; 支持媒體類型 圖片 視頻
controller.allowsEditing = YES;
controller.delegate = self;
controller.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn; // 開啟閃光燈
controller.cameraDevice = UIImagePickerControllerCameraDeviceRear; // 前置攝像頭
[self presentViewController:controller animated:YES completion:NULL];
}
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey, id> *)info
{
NSLog(@" %@ ",info);
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]) { // 照片
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
// 將照片儲(chǔ)存到手機(jī)
SEL saveImage = @selector(imageSavedSuccess:didFinishSaveWithError:contextInfo:);
UIImageWriteToSavedPhotosAlbum(image, self, saveImage, NULL);
} else if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeVideo]) { // 視頻
// UIImagePickerControllerMediaURL
}
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[picker dismissViewControllerAnimated:YES completion:NULL];
}
#pragma mark - private method
-(void)imageSavedSuccess:(UIImage *)image
didFinishSaveWithError:(NSError *)error
contextInfo:(void *)info
{
if (!error) {
NSLog(@"圖片保存成功");
} else {
NSLog(@"圖片保存失敗");
}
}
視頻拍攝
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
controller.sourceType = UIImagePickerControllerSourceTypeCamera;
// 拍攝類型
NSString *mediaType = (__bridge NSString *)kUTTypeMovie;
controller.mediaTypes = @[mediaType];
controller.delegate = self;
controller.videoQuality = UIImagePickerControllerQualityTypeHigh; // 視頻質(zhì)量
controller.videoMaximumDuration = 30.0f; // 設(shè)置最長拍攝時(shí)間
[self presentViewController:controller animated:YES completion:NULL];
- UIImagePickerControllerDelegate
NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
if ([type isEqualToString:(__bridge NSString *)kUTTypeMovie]) {
NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
NSString *path = url.path;
// 判斷能不能保存到相冊(cè)
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path)) {
UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL);
}
}
-(void)video:(NSString *)videoPath didFinishSavingWithError:(NSString *)error contextInfo:(void *)info
{
if (!error) {
NSLog(@"視頻保存成功");
} else {
NSLog(@"失敗");
}
}