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;
}