iOS调用相机,相册,上传头像 分类: ios技术 2015-04-14 11:23 256人阅读 评论(0) 收藏
一、新建工程
二、拖控件,创建映射
三、在.h中加入delegate
- @interface ViewController : UIViewController
复制代码
四、实现按钮事件
- -(IBAction)chooseImage:(id)sender {
- UIActionSheet *sheet;
- // 判断是否支持相机
- if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
- {
- sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"拍照",@"从相册选择", nil];
- }
- else {
- sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"从相册选择", nil];
- }
- sheet.tag = 255;
- [sheet showInView:self.view];
- }
复制代码
五、实现actionSheet delegate事件
- -(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
- {
- if (actionSheet.tag == 255) {
- NSUInteger sourceType = 0;
- // 判断是否支持相机
- if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
- switch (buttonIndex) {
- case 0:
- // 取消
- return;
- case 1:
- // 相机
- sourceType = UIImagePickerControllerSourceTypeCamera;
- break;
- case 2:
- // 相册
- sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
- break;
- }
- }
- else {
- if (buttonIndex == 0) {
- return;
- } else {
- sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
- }
- }
- // 跳转到相机或相册页面
- UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
- imagePickerController.delegate = self;
- imagePickerController.allowsEditing = YES;
- imagePickerController.sourceType = sourceType;
- [self presentViewController:imagePickerController animated:YES completion:^{}];
- [imagePickerController release];
- }
- }
复制代码
六、实现ImagePicker delegate 事件
- #pragma mark - image picker delegte
- - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
- {
- [picker dismissViewControllerAnimated:YES completion:^{}];
- UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
- /* 此处info 有六个值
- * UIImagePickerControllerMediaType; // an NSString UTTypeImage)
- * UIImagePickerControllerOriginalImage; // a UIImage 原始图片
- * UIImagePickerControllerEditedImage; // a UIImage 裁剪后图片
- * UIImagePickerControllerCropRect; // an NSValue (CGRect)
- * UIImagePickerControllerMediaURL; // an NSURL
- * UIImagePickerControllerReferenceURL // an NSURL that references an asset in the AssetsLibrary framework
- * UIImagePickerControllerMediaMetadata // an NSDictionary containing metadata from a captured photo
- */
- // 保存图片至本地,方法见下文
- [self saveImage:image withName:@"currentImage.png"];
- NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
- UIImage *savedImage = [[UIImage alloc] initWithContentsOfFile:fullPath];
- isFullScreen = NO;
- [self.imageView setImage:savedImage];
- self.imageView.tag = 100;
- }
- - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
- {
- [self dismissViewControllerAnimated:YES completion:^{}];
- }
复制代码
七、保存图片
高保真压缩图片方法
- NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality
- )
复制代码
此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。
- #pragma mark - 保存图片至沙盒
- - (void) saveImage:(UIImage *)currentImage withName:(NSString *)imageName
- {
- NSData *imageData = UIImageJPEGRepresentation(currentImage, 0.5);
- // 获取沙盒目录
- NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
- // 将图片写入文件
- [imageData writeToFile:fullPath atomically:NO];
- }
复制代码
八、实现点击图片预览功能,滑动放大缩小,带动画
- -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- isFullScreen = !isFullScreen;
- UITouch *touch = [touches anyObject];
- CGPoint touchPoint = [touch locationInView:self.view];
- CGPoint imagePoint = self.imageView.frame.origin;
- //touchPoint.x ,touchPoint.y 就是触点的坐标
- // 触点在imageView内,点击imageView时 放大,再次点击时缩小
- if(imagePoint.x <= touchPoint.x && imagePoint.x +self.imageView.frame.size.width >=touchPoint.x && imagePoint.y <= touchPoint.y && imagePoint.y+self.imageView.frame.size.height >= touchPoint.y)
- {
- // 设置图片放大动画
- [UIView beginAnimations:nil context:nil];
- // 动画时间
- [UIView setAnimationDuration:1];
- if (isFullScreen) {
- // 放大尺寸
- self.imageView.frame = CGRectMake(0, 0, 320, 480);
- }
- else {
- // 缩小尺寸
- self.imageView.frame = CGRectMake(50, 65, 90, 115);
- }
- // commit动画
- [UIView commitAnimations];
- }
- }
复制代码
九、上传图片,使用ASIhttpRequest类库实现,由于本文重点不是网络请求,故不对ASIHttpRequest详细讲述,只贴出部分代码
- ASIFormDataRequest *requestReport = [[ASIFormDataRequest alloc] initWithURL:服务器地址];
- NSString *Path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
- [requestReport setFile:Path forKey:@"picturepath"];
- [requestReport buildPostBody];
- requestReport.delegate = self;
- [requestReport startAsynchronous];
复制代码
版权声明:本文为博主原创文章,未经博主允许不得转载。
iOS调用相机,相册,上传头像 分类: ios技术 2015-04-14 11:23 256人阅读 评论(0) 收藏的更多相关文章
- MS SQLServer 批量附加数据库 分类: SQL Server 数据库 2015-07-13 11:12 30人阅读 评论(0) 收藏
************************************************************ * 标题:MS SQLServer 批量附加数据库 * 说明:请根据下面的注释 ...
- iOS调用相机,相册,上传头像
一.新建工程 二.拖控件,创建映射 三.在.h中加入delegate @interface ViewController : UIViewController 复制代码 四.实现按钮事件 -(IBAc ...
- Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏
一.决策树 决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中 推理出以决策树表示的分类规则.构造决策树的目的是找出属性和类别间的关系, ...
- javascript的全局变量 分类: C1_HTML/JS/JQUERY 2014-08-07 11:03 562人阅读 评论(0) 收藏
javascipt是一门面向对象的编程语言.由于存在一些全局属性及全局函数,因此可以认为存在一个全局变量,这些全局属性及全局函数均是其属性或函数. 在js核心中,并没有定义一个具体的全局变量,因此,j ...
- Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏
在我看来,学会写简单的Makefile,阅读较复杂的makefile,是每一个Linux程序员都必须拥有的基本素质.Makefile可以自动识别哪些源文件被更改过,需要重新编译,那些不需要.从而节省大 ...
- 解决Eclipse中文乱码 分类: B1_JAVA 2014-06-25 11:23 336人阅读 评论(0) 收藏
使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置编码 格式解决乱码问题.在Eclipse可以从几个层面设置编 ...
- Mahout快速入门教程 分类: B10_计算机基础 2015-03-07 16:20 508人阅读 评论(0) 收藏
Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单 ...
- hadoop的关键进程 分类: A1_HADOOP 2015-06-06 11:37 52人阅读 评论(0) 收藏
hadoop集群中主要进程有 master: NameNode, ResourceManager, slaves: DataNode, NodeManager, RunJar, MRAppM ...
随机推荐
- hdu-1978_How many ways dfs+记忆化搜索
How many ways Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- IE8浏览器兼容问题总结
IE8+兼容经验小结 January 15, 2014 本文分享下我在项目中积累的IE8+兼容性问题的解决方法.根据我的实践经验,如果你在写HTML/CSS时候是按照W3C推荐的方式写的,然后下面的几 ...
- Git学习 -- 冲突解决
当连个分支对统一文件提交了不同修改时,可能会出现冲突,例如: $ git merge feature1 Auto-merging readme.txt CONFLICT (content): Merg ...
- 微信小程序 问题收集
1. Q: 想知道微信小程序这些证书的具体要求在哪儿能查到? 就比如说,他要求有卫生和计划生育委员会批文 我想知道是需要省级还是市级的 但是官网查不到 A:市级省级的我也不是特清楚 [/ak] 应该是 ...
- 随机法解决TSP问题
TSP问题一直是个头疼的问题,但是解决的方法数不胜数,很多的算法也都能解决.百度资料一大堆,但是我找到了代码比较简练的一种.随机法.下面只是个人的看法而已,如果有任何问题虚心接受. 顾名思义,随机法就 ...
- ImageLoader的使用
显示本地图片 //ImageLoader使用前必须初始化 ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.init(I ...
- hdu_2222_Keywords Search(AC自动机板子)
题目连接:hdu_2222_Keywords Search 存个自己写的AC自动机 #include<cstdio> #include<cstring> #define F(i ...
- psy & obv
PSY和OBV 1,PSY心理线是投资者对股市涨跌产生心理波动的情绪指标.相反,当PSY曲线向下跌破PSYMA曲线后,为卖出时机..当PSY曲线向上突破PSYMA曲线后,开始向下回调至PSYMA曲线, ...
- javascript中的正则匹配函数exec(),test(),match()
test() var str = "cat";var reStr = /cat/;alert(reStr.test(str)); 输出为:true 它的返回值为true or fa ...
- 2016沈阳网络赛 odd-even number
odd-even number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...