Camera
#import <MobileCoreServices/UTCoreTypes.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <MediaPlayer/MPMoviePlayerViewController.h>
#import <MediaPlayer/MPMoviePlayerController.h>
#import <MediaPlayer/MPMusicPlayerController.h>
#import <AssetsLibrary/AssetsLibrary.h>
delegate
<UINavigationControllerDelegate,UIImagePickerControllerDelegate ,UIVideoEditorControllerDelegate>
1.Camera 一些状态判断
-(void)test{
if ([selfisCameravaliable]) {
NSLog(@"当前相机可用");
} else {
NSLog(@"当前相机不可用");
}
if ([selfisCamerFlashavaliable]) {
NSLog(@"当前灯可用");
} else {
NSLog(@"当前灯不可用");
}
if ([selfisCamerFlashRearlavaliable]) {
NSLog(@"当后灯可用");
} else {
NSLog(@"当后灯不可用");
}
//前后摄像头是否可用
if ([selfisCameraavaliFront]) {
NSLog(@"当摄像头可用");
} else {
NSLog(@"当摄像头不可用");
}
if ([selfisCameraavaliRear]) {
NSLog(@"后摄像头可用");
} else {
NSLog(@"后摄像头不可用");
}
//当前camera支持的媒体类型 iamge or video
if ([selfcameraSupportMedaiType:(__bridgeNSString *)kUTTypeImage]) {
NSLog(@"支持拍照");
} else {
NSLog(@"不支持拍照");
}
if ([selfcameraSupportMedaiType:(__bridgeNSString *)kUTTypeMovie]) {
NSLog(@"支持录像");
} else {
NSLog(@"不支持录像");
}
}
- (BOOL)isCameravaliable{
return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
}
-(BOOL)isCamerFlashavaliable{
return [UIImagePickerControllerisFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceFront];
}
-(BOOL)isCamerFlashRearlavaliable{
return [UIImagePickerControllerisFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear];
}
-(BOOL)isCameraavaliFront{
return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
}
-(BOOL)isCameraavaliRear{
return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
}
-(BOOL)cameraSupportMedaiType:(NSString *) paraMediaType{
NSArray *avaiableMedia = [UIImagePickerControlleravailableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
for (NSString *itemin avaiableMedia) {
if ([itemisEqualToString:paraMediaType]) {
returntrue;
}
}
returnfalse;
}
2.Camera 拍照功能
UIImagePickerController *controller = [[UIImagePickerControlleralloc] init];
//设置图片源
controller.sourceType =UIImagePickerControllerSourceTypeCamera;
NSString *requireMediaType = (__bridgeNSString *)kUTTypeImage;
controller.mediaTypes = [NSArrayarrayWithObjects:requireMediaType,nil];
//图片是否可以编辑
controller.allowsEditing =false;
// controller.cameraDevice
controller.delegate =self;
controller.cameraFlashMode =UIImagePickerControllerCameraFlashModeOn;
[self.navigationControllerpresentViewController:controller animated:YEScompletion:nil];
相册照片选取功----
-(void)configImagePickerLib{
UIImagePickerController *controller = [[UIImagePickerControlleralloc] init];
//设置图片源
controller.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;
NSString *requireMediaType = (__bridgeNSString *)kUTTypeImage;
controller.mediaTypes = [NSArrayarrayWithObjects:requireMediaType,nil];
//图片是否可以编辑
controller.allowsEditing =false;
// controller.cameraDevice
controller.delegate =self;
[self.navigationControllerpresentViewController:controller animated:YEScompletion:nil];
}
#delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
//获取拍照获得的图片
/* picture */
NSString *mediaType = [infoobjectForKey:UIImagePickerControllerMediaType];
if ([mediaTypeisEqualToString:(__bridgeNSString*)kUTTypeImage]) {
UIImage *image = [infoobjectForKey:UIImagePickerControllerOriginalImage];
self.imageVIew.image = image;
self.imageVIew.contentMode =UIViewContentModeScaleToFill;
//将图片保存
SEL saveImage =@selector(imageWasSaveSucessfully:didFinishiDavingWithError: contextInfo:);
UIImageWriteToSavedPhotosAlbum(image,self, saveImage, nil);
}
// [picker dismissViewControllerAnimated:YES completion:nil];
}
-(void)imageWasSaveSucessfully:(UIImage *)pareImage didFinishiDavingWithError:(NSError *)pareError contextInfo:(void *)prraInfo{
if (pareError ==nil) {
NSLog(@"图片保存成功..");
} else {
NSLog(@"图片保存bu成功..error = %@", pareError);
}
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
//拍照与录像取消触发方法
[picker dismissViewControllerAnimated:YEScompletion:nil];
}
// 扫描媒体库将照片库中第一张图片显示到页面
-(void)choicePic{
ALAssetsLibrary *assetLibrary = [[ALAssetsLibraryalloc] init];
//创建一个子线程
dispatch_queue_t q =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(q, ^{
// 扫描媒体库将照片库中第一张图片显示到页面
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAllusingBlock:^(ALAssetsGroup *group,BOOL *stop) {
//使用block查看遍历资源
[group enumerateAssetsUsingBlock:^(ALAsset *result,NSUInteger index, BOOL *stop) {
//主要业务逻辑
NSString *assetType = [resultvalueForProperty:ALAssetPropertyType];
//如果是图片资源
if ([assetTypeisEqualToString:ALAssetTypePhoto]) {
//是否停止遍历
*stop = false;
//返回图片信息
ALAssetRepresentation *asseetRepresentation = [resultdefaultRepresentation];
//图片缩放参数
CGFloat imagecale = [asseetRepresentationscale];
UIImageOrientation imageOrientation = (UIImageOrientation)[asseetRepresentationorientation];
dispatch_async(dispatch_get_main_queue(), ^{
CGImageRef imageRef = [asseetRepresentationfullResolutionImage];
UIImage *image = [[UIImagealloc] initWithCGImage:imageRefscale:imagecale orientation:imageOrientation];
if (image !=nil) {
//显示到界面
self.imageVIew.image = image;
}
});
}
}];
} failureBlock:^(NSError *error) {
NSLog(@"error = %@", error);
}];
});
}
Camea录像功能
#pragma mark ##########
-(void)configVideoController{
UIImagePickerController *controller = [[UIImagePickerControlleralloc] init];
NSString *requireMediaType = (__bridgeNSString *)kUTTypeMovie;
controller.sourceType =UIImagePickerControllerSourceTypeCamera;
//类型 media movie
controller.mediaTypes = [NSArrayarrayWithObjects:requireMediaType,nil];
//
controller.delegate =self;
//视屏设置品质
controller.videoQuality =UIImagePickerControllerQualityTypeHigh;
controller.videoMaximumDuration =30.0;
[self.navigationControllerpresentViewController:controller animated:YEScompletion:nil];
}
#Delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
/* vido */
//当前多媒体格式
NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
__block MPMoviePlayerViewController *movieController;
if ([type isEqualToString:(__bridge NSString *)kUTTypeMovie]) {
NSDictionary *metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];
NSURL *urlVideo = [info objectForKey:UIImagePickerControllerMediaURL];
NSLog(@"urlVideo = %@", urlVideo);
// movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:urlVideo];
// movieController.moviePlayer.scalingMode = MPMovieScalingModeFill;
// //控制类型
// movieController.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
// [picker dismissViewControllerAnimated:YES completion:^{
//
// [self presentMoviePlayerViewControllerAnimated:movieController];
// }];
ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init];
[lib writeVideoAtPathToSavedPhotosAlbum:urlVideo completionBlock:^(NSURL *assetURL, NSError *error) {
if (error ==nil) {
NSLog(@"视频保存成功");
} else {
NSLog(@"视频保存成功");
}
}];
}
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
//拍照与录像取消触发方法
[picker dismissViewControllerAnimated:YEScompletion:nil];
}
//视频编辑
UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];
imagePicker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;
NSString *requireMediaType = (__bridgeNSString *)kUTTypeMovie;
//类型 media movie
imagePicker.mediaTypes = [NSArrayarrayWithObjects:requireMediaType,nil];
//
imagePicker.delegate =self;
[self.navigationControllerpresentViewController:imagePickeranimated:YEScompletion:nil];
//info 包含type image/video 附加信息
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
NSString *mediaType = [infoobjectForKey:UIImagePickerControllerMediaType];
__blockNSURL *videoUrl = nil;
if ([mediaTypeisEqualToString:(__bridgeNSString*)kUTTypeMovie]) {
videoUrl = [info objectForKey:UIImagePickerControllerMediaURL];
}
//处理视频
[picker dismissViewControllerAnimated:YEScompletion:^{
if (videoUrl !=nil) {
NSString *videoString = [videoUrlpath];
if ([UIVideoEditorControllercanEditVideoAtPath:videoString]) {
UIVideoEditorController *videoEdit = [[UIVideoEditorControlleralloc] init];
videoEdit.delegate =self;
videoEdit.videoPath = videoString;
[self.navigationControllerpresentViewController:videoEdit animated:YEScompletion:^{
}];
videoUrl = nil;
}
} else {
NSLog(@"当前路径下的资源不可编辑 ...");
}
}];
}
#pragma mark editdelegate
-(void)videoEditorController:(UIVideoEditorController *)editor didSaveEditedVideoToPath:(NSString *)editedVideoPath{
NSLog(@"editVideoPath = %@", editedVideoPath);
[editor dismissViewControllerAnimated:YEScompletion:nil];
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
return YES;
}