调用相机,选择图片上传,带预览功能

一、新建工程

二、拖控件,创建映射

三、在.h中加入delegate

1 @interface ViewController : UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>

四、实现按钮事件

01 -(IBAction)chooseImage:(id)sender {
02      
03     UIActionSheet *sheet;
04 <p>
05 // 判断是否支持相机
06 </p>
07 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
08  
09        {
10            sheet  = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"拍照",@"从相册选择", nil];
11  
12        }
13  
14     else {
15          
16         sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"从相册选择", nil];
17  
18     }
19      
20     sheet.tag = 255;
21      
22     [sheet showInView:self.view];
23      
24 }

五、实现actionSheet delegate事件

判断是否支持相机,跳转到相机或相册界面
01 -(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
02 {
03     if (actionSheet.tag == 255) {
04          
05         NSUInteger sourceType = 0;
06          
07         // 判断是否支持相机
08         if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
09              
10             switch (buttonIndex) {
11                 case 0:
12                     // 取消
13                     return;
14                 case 1:
15                     // 相机
16                     sourceType = UIImagePickerControllerSourceTypeCamera;
17                     break;
18                      
19                 case 2:
20                     // 相册
21                     sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
22                     break;
23             }
24         }
25         else {
26             if (buttonIndex == 0) {
27                  
28                 return;
29             else {
30                 sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
31             }
32         }
33 <p>
34 // 跳转到相机或相册页面
35 </p>
36 UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
37          
38         imagePickerController.delegate = self;
39          
40         imagePickerController.allowsEditing = YES;
41          
42         imagePickerController.sourceType = sourceType;
43          
44         [self presentViewController:imagePickerController animated:YES completion:^{}];
45          
46         [imagePickerController release];
47     }
48 }
六、实现ImagePicker delegate 事件
01 #pragma mark - image picker delegte
02 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
03 {
04     [picker dismissViewControllerAnimated:YES completion:^{}];
05      
06     UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
07     /* 此处info 有六个值
08      * UIImagePickerControllerMediaType; // an NSString UTTypeImage)
09      * UIImagePickerControllerOriginalImage;  // a UIImage 原始图片
10      * UIImagePickerControllerEditedImage;    // a UIImage 裁剪后图片
11      * UIImagePickerControllerCropRect;       // an NSValue (CGRect)
12      * UIImagePickerControllerMediaURL;       // an NSURL  
13      * UIImagePickerControllerReferenceURL    // an NSURL that references an asset in the AssetsLibrary framework
14      * UIImagePickerControllerMediaMetadata    // an NSDictionary containing metadata from a captured photo
15      */
16     // 保存图片至本地,方法见下文
17     [self saveImage:image withName:@"currentImage.png"];
18      
19     NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
20      
21     UIImage *savedImage = [[UIImage alloc] initWithContentsOfFile:fullPath];
22      
23     isFullScreen = NO;
24     [self.imageView setImage:savedImage];
25      
26     self.imageView.tag = 100;
27      
28 }
29 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
30 {
31     [self dismissViewControllerAnimated:YES completion:^{}];
32 }
七、保存图片
高保真压缩图片方法
NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality
)
此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。  
01 #pragma mark - 保存图片至沙盒
02 - (void) saveImage:(UIImage *)currentImage withName:(NSString *)imageName
03 {
04      
05     NSData *imageData = UIImageJPEGRepresentation(currentImage, 0.5);
06     // 获取沙盒目录
07      
08     NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
09     // 将图片写入文件
10      
11     [imageData writeToFile:fullPath atomically:NO];
12 }
八、实现点击图片预览功能,滑动放大缩小,带动画
01 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
02 {
03      
04     isFullScreen = !isFullScreen;
05     UITouch *touch = [touches anyObject];
06      
07     CGPoint touchPoint = [touch locationInView:self.view];
08      
09     CGPoint imagePoint = self.imageView.frame.origin;
10     //touchPoint.x ,touchPoint.y 就是触点的坐标
11      
12     // 触点在imageView内,点击imageView时 放大,再次点击时缩小
13     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)
14     {
15         // 设置图片放大动画
16         [UIView beginAnimations:nil context:nil];
17         // 动画时间
18         [UIView setAnimationDuration:1];
19          
20         if (isFullScreen) {
21             // 放大尺寸
22              
23             self.imageView.frame = CGRectMake(0, 0, 320, 480);
24         }
25         else {
26             // 缩小尺寸
27             self.imageView.frame = CGRectMake(50, 65, 90, 115);
28         }
29          
30         // commit动画
31         [UIView commitAnimations];
32          
33     }
34      
35 }
九、上传图片,使用ASIhttpRequest类库实现,由于本文重点不是网络请求,故不对ASIHttpRequest详细讲述,只贴出部分代码
01 ASIFormDataRequest *requestReport  = [[ASIFormDataRequest alloc] initWithURL:服务器地址];
02   
03 NSString *Path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
04                
05 [requestReport setFile:Path forKey:@"picturepath"];
06  
07 [requestReport buildPostBody];
08  
09 requestReport.delegate = self;
10  
11 [requestReport startAsynchronous];

效果图如下:

          ->

      

      

ps:模拟器添加图片

1.模拟器无法调用相机;

2.模拟器添加图片方法:将图片拖至模拟器主屏,会由模拟器safari打开,长按可保存至模拟器相册,即可进行模拟器调试了。

3.关于调用相机,是系统自带的,不知道如何修改英文标题为中文,如cancel换为取消等,望知道的大虾们不吝告知,万分感谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值