一、新建工程

二、拖控件,创建映射

三、在.h中加入delegate

  1. @interface ViewController : UIViewController

复制代码

四、实现按钮事件

  1. -(IBAction)chooseImage:(id)sender {
  2. UIActionSheet *sheet;
  3. // 判断是否支持相机
  4. if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
  5. {
  6. sheet  = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"拍照",@"从相册选择", nil];
  7. }
  8. else {
  9. sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"从相册选择", nil];
  10. }
  11. sheet.tag = 255;
  12. [sheet showInView:self.view];
  13. }

复制代码

五、实现actionSheet delegate事件

  1. -(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
  2. {
  3. if (actionSheet.tag == 255) {
  4. NSUInteger sourceType = 0;
  5. // 判断是否支持相机
  6. if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
  7. switch (buttonIndex) {
  8. case 0:
  9. // 取消
  10. return;
  11. case 1:
  12. // 相机
  13. sourceType = UIImagePickerControllerSourceTypeCamera;
  14. break;
  15. case 2:
  16. // 相册
  17. sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  18. break;
  19. }
  20. }
  21. else {
  22. if (buttonIndex == 0) {
  23. return;
  24. } else {
  25. sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
  26. }
  27. }
  28. // 跳转到相机或相册页面
  29. UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
  30. imagePickerController.delegate = self;
  31. imagePickerController.allowsEditing = YES;
  32. imagePickerController.sourceType = sourceType;
  33. [self presentViewController:imagePickerController animated:YES completion:^{}];
  34. [imagePickerController release];
  35. }
  36. }

复制代码

六、实现ImagePicker delegate 事件

  1. #pragma mark - image picker delegte
  2. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
  3. {
  4. [picker dismissViewControllerAnimated:YES completion:^{}];
  5. UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
  6. /* 此处info 有六个值
  7. * UIImagePickerControllerMediaType; // an NSString UTTypeImage)
  8. * UIImagePickerControllerOriginalImage;  // a UIImage 原始图片
  9. * UIImagePickerControllerEditedImage;    // a UIImage 裁剪后图片
  10. * UIImagePickerControllerCropRect;       // an NSValue (CGRect)
  11. * UIImagePickerControllerMediaURL;       // an NSURL
  12. * UIImagePickerControllerReferenceURL    // an NSURL that references an asset in the AssetsLibrary framework
  13. * UIImagePickerControllerMediaMetadata    // an NSDictionary containing metadata from a captured photo
  14. */
  15. // 保存图片至本地,方法见下文
  16. [self saveImage:image withName:@"currentImage.png"];
  17. NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
  18. UIImage *savedImage = [[UIImage alloc] initWithContentsOfFile:fullPath];
  19. isFullScreen = NO;
  20. [self.imageView setImage:savedImage];
  21. self.imageView.tag = 100;
  22. }
  23. - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
  24. {
  25. [self dismissViewControllerAnimated:YES completion:^{}];
  26. }

复制代码

七、保存图片

高保真压缩图片方法

  1. NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality
  2. )

复制代码

此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。

  1. #pragma mark - 保存图片至沙盒
  2. - (void) saveImage:(UIImage *)currentImage withName:(NSString *)imageName
  3. {
  4. NSData *imageData = UIImageJPEGRepresentation(currentImage, 0.5);
  5. // 获取沙盒目录
  6. NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
  7. // 将图片写入文件
  8. [imageData writeToFile:fullPath atomically:NO];
  9. }

复制代码

八、实现点击图片预览功能,滑动放大缩小,带动画

  1. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  2. {
  3. isFullScreen = !isFullScreen;
  4. UITouch *touch = [touches anyObject];
  5. CGPoint touchPoint = [touch locationInView:self.view];
  6. CGPoint imagePoint = self.imageView.frame.origin;
  7. //touchPoint.x ,touchPoint.y 就是触点的坐标
  8. // 触点在imageView内,点击imageView时 放大,再次点击时缩小
  9. 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)
  10. {
  11. // 设置图片放大动画
  12. [UIView beginAnimations:nil context:nil];
  13. // 动画时间
  14. [UIView setAnimationDuration:1];
  15. if (isFullScreen) {
  16. // 放大尺寸
  17. self.imageView.frame = CGRectMake(0, 0, 320, 480);
  18. }
  19. else {
  20. // 缩小尺寸
  21. self.imageView.frame = CGRectMake(50, 65, 90, 115);
  22. }
  23. // commit动画
  24. [UIView commitAnimations];
  25. }
  26. }

复制代码

九、上传图片,使用ASIhttpRequest类库实现,由于本文重点不是网络请求,故不对ASIHttpRequest详细讲述,只贴出部分代码

  1. ASIFormDataRequest *requestReport  = [[ASIFormDataRequest alloc] initWithURL:服务器地址];
  2. NSString *Path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
  3. [requestReport setFile:Path forKey:@"picturepath"];
  4. [requestReport buildPostBody];
  5. requestReport.delegate = self;
  6. [requestReport startAsynchronous];

复制代码

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS调用相机,相册,上传头像 分类: ios技术 2015-04-14 11:23 256人阅读 评论(0) 收藏的更多相关文章

  1. MS SQLServer 批量附加数据库 分类: SQL Server 数据库 2015-07-13 11:12 30人阅读 评论(0) 收藏

    ************************************************************ * 标题:MS SQLServer 批量附加数据库 * 说明:请根据下面的注释 ...

  2. iOS调用相机,相册,上传头像

    一.新建工程 二.拖控件,创建映射 三.在.h中加入delegate @interface ViewController : UIViewController 复制代码 四.实现按钮事件 -(IBAc ...

  3. Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  4. 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏

    一.决策树 决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中 推理出以决策树表示的分类规则.构造决策树的目的是找出属性和类别间的关系, ...

  5. javascript的全局变量 分类: C1_HTML/JS/JQUERY 2014-08-07 11:03 562人阅读 评论(0) 收藏

    javascipt是一门面向对象的编程语言.由于存在一些全局属性及全局函数,因此可以认为存在一个全局变量,这些全局属性及全局函数均是其属性或函数. 在js核心中,并没有定义一个具体的全局变量,因此,j ...

  6. Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏

    在我看来,学会写简单的Makefile,阅读较复杂的makefile,是每一个Linux程序员都必须拥有的基本素质.Makefile可以自动识别哪些源文件被更改过,需要重新编译,那些不需要.从而节省大 ...

  7. 解决Eclipse中文乱码 分类: B1_JAVA 2014-06-25 11:23 336人阅读 评论(0) 收藏

    使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置编码 格式解决乱码问题.在Eclipse可以从几个层面设置编 ...

  8. Mahout快速入门教程 分类: B10_计算机基础 2015-03-07 16:20 508人阅读 评论(0) 收藏

    Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单 ...

  9. hadoop的关键进程 分类: A1_HADOOP 2015-06-06 11:37 52人阅读 评论(0) 收藏

    hadoop集群中主要进程有 master:   NameNode, ResourceManager, slaves:   DataNode, NodeManager,  RunJar, MRAppM ...

随机推荐

  1. javascript语句语义大全(2)

    1. 四则运算相关 +,-,*,/,% 分别是加减乘除和取余 2.Math.pow(a,b) a的b次方 3.toFixed(a) 四舍五入为指定小数位数的数字 4. k++; ++K 看似相同但是在 ...

  2. ice grid 第一篇

    关键点: (1)如果想提高并发的话,还是在一个node上对于同一个application开多个server instance. 1.名词解释 .Replica groups A replica gro ...

  3. jq的事件冒泡

    在页面上可以有多个事件,也可以多个元素响应同一件事, 事件冒泡引发的问题: 有些时候不想动用的事件,却因为事件冒泡而触发 解决问题: 1.事件对象 由于IE-DOM和标准的DOM实现事件对象的方法各不 ...

  4. Entity Framework 学习初级篇4--Entity SQL

    Entity SQL 是 ADO.NET 实体框架 提供的 SQL 类语言,用于支持 实体数据模型 (EDM).Entity SQL 可用于对象查询和使用 EntityClient 提供程序执行的查询 ...

  5. postfix疯狂外发垃圾邮件

    分析 一.查找main.cf配置文件 localhost# find / -name main.cf /etc/postfix/main.cf 二.打开/etc/postfix/main.cf来看看. ...

  6. ext3文件系统目录限制问题

    昨晚排查了在KVM的build系统中的一个问题,跟踪到后面发现在一个目录下mkdir创建目录失败.我手动试了一下,提示如下:cannot create directory `/home/master/ ...

  7. C#入门经典-第15章Windows 编程

    在使用Windows窗体时,就是使用System.Windows.Forms名称空间. .NET中的大多数控件都派生于System.Windows.Forms.Control类.

  8. JAVA List<T> 如何初始化

    通常用法:List<类型> list=new ArrayList<类型>();List是一个接口,不可实例化,通过实例化其实现类来使用List集合,他的最常用实现类ArrayL ...

  9. HDU 1217 Arbitrage(Floyd的应用)

    给出一些国家之间的汇率,看看能否从中发现某些肮脏的......朋友交易. 这是Floyd的应用,dp思想,每次都选取最大值,最后看看自己跟自己的.....交易是否大于一.... #include< ...

  10. JavaScript中call,apply,bind方法的总结

    原文链接:http://www.cnblogs.com/pssp/p/5215621.html why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之 ...