IOS SDK相机的详细解释/画廊(默认+他们的高清摄像头接口)
原版的blog,转载请注明出处
blog.csdn.net/hello_hwc
前言:
新NSURLSession的UploadTask的,结果写那个Demo的时候想要写成拍照上传。然后就想到先写一个关于拍照的Demo吧。本文会先介绍下怎样使用系统提供的界面拍照和选择相冊,然后自己定义拍照界面。注意。本文使用的是UIImagePickerController,所以不能全然的自己定义。假设想要彻底的自己定义拍照。建议选择AV Foundation这个框架来做
Demo效果
进入系统的拍照界面
进入自己定义拍照界面
自己定义前置摄像头和后置摄像头切换动画-翻页
一 使用系统提供的界面拍照和相冊选择
第一步
保存一个UIImagePickerController的实例,然后适当的时候初始化始化。
Demo选择在viewDidLoad初始化。让当前类实现UIImagePickerControllerDelegate,UINavigationControllerDelegate两个代理
@property (strong,nonatomic)UIImagePickerController * imagePikerViewController;
//初始化
self.imagePikerViewController = [[UIImagePickerController alloc] init];
self.imagePikerViewController.delegate = self;//通过代理来传递拍照的图片
self.imagePikerViewController.allowsEditing = YES;//同意编辑
第二步,通过ActionSheet来让用户选择是拍照还是到相冊选择,然后模态的显示
[self presentViewController:self.imagePikerViewController animated:YES completion:NULL];
注意,要先推断相机是否可用,然后在进入相机(有可能相机坏了。或者在虚拟机上执行的)
UIAlertController * alertController = [UIAlertController alertControllerWithTitle: nil
message: nil
preferredStyle:UIAlertControllerStyleActionSheet];
[alertController addAction: [UIAlertAction actionWithTitle: @"Take Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
self.imagePikerViewController.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:self.imagePikerViewController animated:YES completion:NULL];
}else{
[self showAlertWithMessage:@"Camera is not available in this device or simulator"];
}
}]];
[alertController addAction: [UIAlertAction actionWithTitle: @"Choose Existing Photo" style: UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){
self.imagePikerViewController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:self.imagePikerViewController animated:YES completion:NULL];
}
}]];
[alertController addAction: [UIAlertAction actionWithTitle: @"Cancel" style: UIAlertActionStyleCancel handler:nil]];
[self presentViewController: alertController animated: YES completion: nil];
第三部,代理函数处理拍照或者cancel事件
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage * image = info[UIImagePickerControllerEditedImage];
if (!image) {
image = info[UIImagePickerControllerOriginalImage];
}
self.imageview.image = image;
[self dismissViewControllerAnimated:YES completion:NULL];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[self dismissViewControllerAnimated:YES completion:NULL];
}
二 自己定义拍照界面
UIImagePickerController的自己定义界面比較简单。通过设置cameraOverlayView这个属性为自己定义的View就能自己定义。
第一步 创建一个View
创建xib文件
拖拽控件。进行autoLayout,终于效果如图
把fileOwner设置成CustomTakePhotoViewController
第二步 在显示拍照界面之前,把UI设置成自己想要的,注意,把属性
showsCameraControls设置为NO,不让默认的界面出现。
self.imagePikerViewController.sourceType = UIImagePickerControllerSourceTypeCamera;
self.imagePikerViewController.showsCameraControls = NO;
[[NSBundle mainBundle] loadNibNamed:@"CustomOverLayview" owner:self options:nil];
self.takePictureButton.layer.cornerRadius = 20;
self.takePictureButton.clipsToBounds = YES;
self.overlayView.frame = self.imagePikerViewController.cameraOverlayView.frame;
self.overlayView.backgroundColor = [UIColor clearColor];
self.imagePikerViewController.cameraOverlayView = self.overlayView;
self.overlayView = nil;
[self presentViewController:self.imagePikerViewController animated:YES completion:NULL];
第三步。为view上的控件加入动作
Segment Control负责切换前置摄像头和后置摄像头。为了流畅,在切换的时候显示动画。
- (IBAction)cameraSelect:(UISegmentedControl *)sender{
NSInteger index = sender.selectedSegmentIndex;
if (index == 0) {
[UIView transitionWithView:self.imagePikerViewController.view duration:1.0 options:UIViewAnimationOptionAllowAnimatedContent | UIViewAnimationOptionTransitionCurlDown animations:^{
self.imagePikerViewController.cameraDevice = UIImagePickerControllerCameraDeviceFront;
} completion:NULL];
}else{
[UIView transitionWithView:self.imagePikerViewController.view duration:1.0 options:UIViewAnimationOptionAllowAnimatedContent | UIViewAnimationOptionTransitionCurlUp animations:^{
[self.imagePikerViewController setCameraDevice:UIImagePickerControllerCameraDeviceRear];
} completion:NULL];
}
}
拍照的Button
- (IBAction)takePicture:(id)sender {
[self.imagePikerViewController takePicture];
}
取消的Button
- (IBAction)cancelTakePicture:(id)sender {
[self dismissViewControllerAnimated:YES completion:NULL];
}
第四步 在代理中处理图片
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage * image = info[UIImagePickerControllerEditedImage];
if (!image) {
image = info[UIImagePickerControllerOriginalImage];
}
self.imageview.image = image;
[self dismissViewControllerAnimated:YES completion:NULL];
}
注意,假设log输出
Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.
直接忽略就是了,没有不论什么影响。貌似是IOS 8的一个bug
版权声明:本文博客原创文章。如需转载请注明出处
IOS SDK相机的详细解释/画廊(默认+他们的高清摄像头接口)的更多相关文章
- IOS 中得runloop 详细解释
1.Runloop基础知识- 1.1 字面意思 a 运行循环 b 跑圈 - 1.2 基本作用(作用重大) a 保持程序的持续运行(ios程序为什么能一直活着不会死) b 处理app中的各种事件(比如触 ...
- 百度VS高德:LBS开发平台ios SDK对比评测
随着iPhone6手机的热销,目前的iOS应用开发市场也迎来了全盛时期.据了解,目前市面上已有的iOS应用基本覆盖了购物.上门服务.用车服务.娱乐等行业.而在这些iOS应用中,内置LBS服务的应用占大 ...
- ios学习--TableView详细解释
-.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [DataTa ...
- iOS SDK具体解释之NSCopying协议
原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK具体解释专栏 http://blog.csdn ...
- iOS SDK具体解释之UIDevice(系统版本号,设备型号...)
原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 blog.csdn.net/column/details/huangwenchen ...
- 有趣 IOS 开展 - block 使用具体解释
Block 它是iOS于4.0新的程序语法之后,于iOS SDK 4.0之后,block应用几乎无处不在. 在其他语言中也有类似的概念,称为闭包(closure),实例object C兄弟swift ...
- cmd 环境变量设置方法详细解释
cmd设置环境变量可以方便我们bat脚本的运行,但是要注意的是变量只在当前的cmd窗口有作用(局部生效),如果想要设置持久的环境变量需要我们通过两种手段进行设置:一种是直接修改注册表,另一种是通过我的 ...
- .htaccess语法之RewriteCond与RewriteRule指令格式详细解释
htaccess语法之RewriteCond与RewriteRule指令格式详细解释 (2012-11-09 18:09:08) 转载▼ 标签: htaccess it 分类: 网络 上文htacc ...
- unity导出工程导入到iOS原生工程中详细步骤
一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...
随机推荐
- ReactJS学习 相关网站
React 入门实例教程-阮一峰 http://www.ruanyifeng.com/blog/2015/03/react.html汇智网-React 互动学习http://hubwiz.com/co ...
- GitLab 安装配置笔记(转)
GitLab的安装方式 GitLab的两种安装方法: 编译安装 优点:可定制性强.数据库既可以选择MySQL,也可以选择PostgreSQL;服务器既可以选择Apache,也可以选择Nginx. 缺点 ...
- mysql 删除重复数据sql声明
CREATE TABLE tmp AS SELECT id FROM get_review_url WHERE (no,title,name,content) IN (SELECT no,title, ...
- Web APi之认证
Web APi之认证(Authentication)两种实现方式后续[三](十五) 前言 之前一直在找工作中,过程也是令人着实的心塞,最后还是稳定了下来,博客也停止更新快一个月了,学如逆水行舟,不 ...
- poj2524
说来惭愧啊..现在才会并查集.我竟然给我妈妈讲明白并查集怎么回事了- - #define _CRT_SECURE_NO_WARNINGS #include <iostream> using ...
- innerHTML使用方法
使用方法: 比方在<body>中写了例如以下的代码:<div id=top></div> 如今用top.innerHTML="..........&quo ...
- Android在ListView滑动数据混乱
我相信做过Android应用程序开发或多或少都遇到了这个问题.或者是在ListView数据损坏幻灯片事件.要么GridView数据损坏幻灯片事件. 让我们来看看一个网友写的文章,个人感觉还不错的文章: ...
- java这些东西发展(1)-------大约ORA00604和ORA12705
******************************有关myEclipse和oracle在连接发生的一个问题********************************* 用户界面显示的评 ...
- SQLHlper意识
经过学习,通过线敲登录的三个例子,敲四行CRUD样品,因此,访问数据库多次,在这些链接库.打开都一样.只是不同的操作将针对不同的表进行.始学习面向对象的思想.当让要对这些不变的要内容要进行打包,提高代 ...
- .NET应用架构设计—四色原型模式(色彩造型、域无关的模型)(概念版)
阅读文件夹: 1.背景介绍 2.问自己,UML对你来说有意义吗?它帮助过你对系统进行分析.建模吗? 3.一直以来事实上我们被一个缝隙隔开了,使我们对OOAD遥不可及 4.四色原型模式填补这个历史缝隙, ...