拍照在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 *)picker
    didFinishPickingMediaWithInfo:(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使用方便,可拍照、视频。适用于拍照界面无定制、简单取图这类需求

最新文章

  1. Windows10+Ubuntu双系统安装 (转)
  2. BestCoder Round #72 (div.2)
  3. [转]C# Winform ListView使用
  4. gcc编译命令
  5. vue-cli 脚手架总结
  6. 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅵ
  7. vim highlight whitespace at end of line and auto delete them
  8. STM32F103 TIM1输出PWM设置
  9. struts2文件下载 &lt;result type=&quot;stream&quot;&gt;
  10. MVC + AngularJS 初体验(实现表单操作)
  11. CSS规则
  12. SSM Spring+SpringMVC+mybatis+maven+mysql环境搭建
  13. Python3 的数据类型
  14. ffmpeg推送直播流的技术进展
  15. 网页调起QQ聊天
  16. SSH配置免密登录
  17. python与pip安装
  18. 让HTMLrunner 报告的子列表都 默认展示出来的 方法(方便发送邮件时可以方便查看)
  19. vue项目部署上线
  20. [翻译] Writing Property Editors 编写属性编辑器

热门文章

  1. html播放音乐目前只支持ie
  2. C++模板的介绍
  3. 一统江湖的大前端(10)——inversify.js控制反转
  4. 基于Qt的tcp客户端和服务器实现摄像头帧数据处理(客户端部分)
  5. Java常用类库2
  6. P2617 Dynamic Rankings (动态开点权值线段树 + 树状数组)
  7. 【51nod1674】区间的价值 V2(算法效率--位运算合并优化+链表实现)
  8. 2018-2019 ACM-ICPC, Asia Dhaka Regional Contest C.Divisors of the Divisors of An Integer (数论)
  9. Pdf和Office相关归集
  10. 1、Django框架目录介绍