iOS - 调用相机连续拍照

简介: iOS - 调用相机连续拍照

跟朋友讨论如题中的功能怎么实现,后来用系统的方法实现了这一功能,说起来有点取巧,就是在确定拍照后的图片后重新进入相机界面,前面我发过一篇Object-C的和Swift的上传头像,以这个为基础实现,具体做法是在,选中一张图片后的代理中:

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

在以下方法中:

        //表单请求,上传文件
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        manager.requestSerializer = [AFJSONRequestSerializer serializer];//请求
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];//响应
        manager.requestSerializer.timeoutInterval = 8;
        /*
         *这里需要特别注意一下,因为没有放具体的上传地址,所以这个上传方式是不成功的,但是方法是没错的,需要替换成正确的上传地址
         */
        [manager POST:[NSString stringWithFormat:@"url"] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            //将图片以表单形式上传
            NSData *data1=[NSData dataWithContentsOfFile:filePath];
            [formData appendPartWithFileData:data1 name:@"headPicFile" fileName:@"headPicFile" mimeType:@"image/png"];
            //关闭相册界面
            [UIView animateWithDuration:0.001 animations:^{
                [picker dismissViewControllerAnimated:NO completion:nil];
            } completion:^(BOOL finished){
                //重新打开相机
                [self presentViewController:picker animated:YES completion:nil];
            }];
        }progress:^(NSProgress *uploadProgress){
        }success:^(NSURLSessionDataTask *task, id responseObject) {
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
            NSLog(@"dic:%@",dic);
            //成功后替换新头像
            NSData *data1=[NSData dataWithContentsOfFile:filePath];
            headImageView.image = [UIImage imageWithData:data1];
        } failure:^(NSURLSessionDataTask *task, NSError *error) {
            NSLog(@"%@",[error description]);
            NSLog(@"%@",error);
            //因为没有有效地址,所以肯定是上传失败的,为了表现出效果,此处也替换为新头像
            NSData *data1=[NSData dataWithContentsOfFile:filePath];
            headImageView.image = [UIImage imageWithData:data1];
        }];

主要是这个方法:

            //关闭相册界面
            [UIView animateWithDuration:0.001 animations:^{
                [picker dismissViewControllerAnimated:NO completion:nil];
            } completion:^(BOOL finished){
                //重新打开相机
                [self presentViewController:picker animated:YES completion:nil];
            }];

用UIView的过渡方法,这个过渡方法在Core Animation中也有介绍过,尤其注意要把present和dismiss的跳转里面的动画设置为NO,否则你设置的时间是无效的,重新打开相机可酌情给YES,具体效果,可以自己动手尝试。


另外picker.allowsEditing根据需要设置,意思是拍照后显示刚拍的图片,可进行编辑,为NO时不显示。


最后再说一句,要想得到多张图片且统一上传,就不要把关闭相机和重新打开的代码放在AF中,因为是直接上传的,要拿到图片请设置全局变量根据是否选择图片来获取当前拍摄的图片并存储。最后统一上传。

目录
相关文章
|
移动开发 前端开发 Android开发
前端html input =“file“ ios/安卓解决无法选择图库/拍照问题
前端html input =“file“ ios/安卓解决无法选择图库/拍照问题
3450 0
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
1788 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
文字识别 iOS开发
|
Dart API Android开发
【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )(二)
【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )(二)
464 0
【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )(二)
|
开发工具 Android开发 iOS开发
【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )(一)
【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )(一)
356 0
【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )(一)
|
iOS开发
IOS调取系统摄像头并拍照
IOS调取系统摄像头并拍照
253 0
|
文字识别 开发工具 iOS开发
iOS扫描证件&银行卡信息识别;身份证识别 (正反) ;矩形边缘识别 ;自定义证件相机 (含demo源码)【修订版】
iOS扫描证件&银行卡信息识别;身份证识别 (正反) ;矩形边缘识别 ;自定义证件相机 (含demo源码)【修订版】
1201 0
iOS扫描证件&银行卡信息识别;身份证识别 (正反) ;矩形边缘识别 ;自定义证件相机 (含demo源码)【修订版】
|
iOS开发
iOS 相机的四种权限
iOS 相机的四种权限
739 0
|
iOS开发
iOS审核 iPad无法调用相机问题被拒记录
iOS审核 iPad无法调用相机问题被拒记录
361 0