iOS拍照之系统拍照
2024-10-12 19:15:54
拍照在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使用方便,可拍照、视频。适用于拍照界面无定制、简单取图这类需求
最新文章
- Windows10+Ubuntu双系统安装 (转)
- BestCoder Round #72 (div.2)
- [转]C# Winform ListView使用
- gcc编译命令
- vue-cli 脚手架总结
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅵ
- vim highlight whitespace at end of line and auto delete them
- STM32F103 TIM1输出PWM设置
- struts2文件下载 <;result type=";stream";>;
- MVC + AngularJS 初体验(实现表单操作)
- CSS规则
- SSM Spring+SpringMVC+mybatis+maven+mysql环境搭建
- Python3 的数据类型
- ffmpeg推送直播流的技术进展
- 网页调起QQ聊天
- SSH配置免密登录
- python与pip安装
- 让HTMLrunner 报告的子列表都 默认展示出来的 方法(方便发送邮件时可以方便查看)
- vue项目部署上线
- [翻译] Writing Property Editors 编写属性编辑器
热门文章
- html播放音乐目前只支持ie
- C++模板的介绍
- 一统江湖的大前端(10)——inversify.js控制反转
- 基于Qt的tcp客户端和服务器实现摄像头帧数据处理(客户端部分)
- Java常用类库2
- P2617 Dynamic Rankings (动态开点权值线段树 + 树状数组)
- 【51nod1674】区间的价值 V2(算法效率--位运算合并优化+链表实现)
- 2018-2019 ACM-ICPC, Asia Dhaka Regional Contest C.Divisors of the Divisors of An Integer (数论)
- Pdf和Office相关归集
- 1、Django框架目录介绍