拍照在App中应用频次高,入门级别间接调用零碎拍照


  • 思路:

    零碎拍照应用UIImagePickerController

    1.设置下plist,否则没权限,报错

    2.判断摄像头,获取权限,否则弹出界面黑着

    3.设置代理,实现代理

    4.代理办法中获取拍照的图片/视频

  • 上菜

    • plist中增加Privacy - Camera Usage Description,文案依据App须要来
    • 权限
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { }
    • 设置UIImagePickerController
    UIImagePickerController *vc = [[UIImagePickerController alloc] init];// 设置该属性的时候,呈现拍照与拍视频选项vc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];vc.sourceType = UIImagePickerControllerSourceTypeCamera;vc.delegate = self;vc.allowsEditing = NO;// 设置摄像头[后置摄像头]vc.cameraDevice = UIImagePickerControllerCameraDeviceRear;// 设置闪光模式vc.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;// 设置摄像头模式vc.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo; // 当该模式设置为video的时候,meidaTypes设置呈现拍照与拍视频选项时,先展现video视频拍摄选项// 录制的最大工夫vc.videoMaximumDuration = 10;// 视频品质vc.videoQuality = UIImagePickerControllerQualityTypeHigh;vc.modalPresentationStyle = UIModalPresentationFullScreen;[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:vc                                                                                 animated:YES                                                                               completion:nil];
    • 代理实现
    #pragma mark - UINavigationControllerDelegate, UIImagePickerControllerDelegate- (void)imagePickerController:(UIImagePickerController *)pickerdidFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {    // 获取选中资源类型    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { // 拍照后果        UIImage *image = nil;        if (picker.allowsEditing) {            image = [info objectForKey:UIImagePickerControllerEditedImage];        } else {            image = [info objectForKey:UIImagePickerControllerOriginalImage];        }        [picker dismissViewControllerAnimated:YES completion:nil];    } else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) { // 视频后果        NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];        // 视频寄存到零碎相册        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {            if (status == PHAuthorizationStatusAuthorized) {                [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{                           [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];                       } completionHandler:^(BOOL success, NSError * error) {                           if (success) {                               NSLog(@"保留视频到相册");                           } else {                               NSLog(@"保留视频到相册失败:%@", error);                           }                       }];            } else {                NSLog(@"无拜访相册权限");            }            dispatch_async(dispatch_get_main_queue(), ^{                [picker dismissViewControllerAnimated:YES completion:nil];            });        }];    }}- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {    [picker dismissViewControllerAnimated:YES completion:nil];}
  • 结语:

    UIImagePickerController使用方便,可拍照、视频。实用于拍照界面无定制、简略取图这类需要