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


    一、新建工程  

    211351_Qgf1_735123.jpg



    二、拖控件,创建映射 

    211441_CK1O_735123.png



    三、在.h中加入delegate

    1. @interface ViewController : UIViewController
    复制代码
    四、实现按钮事件 
    1. -(IBAction)chooseImage:(id)sender {
    2.     
    3.     UIActionSheet *sheet;
    4.     
    5.     // 判断是否支持相机

    6.     if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])

    7.        {
    8.            sheet  = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"拍照",@"从相册选择", nil];

    9.        }

    10.     else {
    11.         
    12.         sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"从相册选择", nil];

    13.     }
    14.     
    15.     sheet.tag = 255;
    16.     
    17.     [sheet showInView:self.view];
    18.     
    19. }
    复制代码
    五、实现actionSheet delegate事件
    1. -(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
    2. {
    3.     if (actionSheet.tag == 255) {
    4.         
    5.         NSUInteger sourceType = 0;
    6.         
    7.         // 判断是否支持相机
    8.         if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    9.             
    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.         // 跳转到相机或相册页面
    34.         UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    35.         
    36.         imagePickerController.delegate = self;
    37.         
    38.         imagePickerController.allowsEditing = YES;
    39.         
    40.         imagePickerController.sourceType = sourceType;
    41.         
    42.         [self presentViewController:imagePickerController animated:YES completion:^{}];
    43.         
    44.         [imagePickerController release];
    45.     }
    46. }
    复制代码
    六、实现ImagePicker delegate 事件
    1. #pragma mark - image picker delegte
    2. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    3. {
    4.     [picker dismissViewControllerAnimated:YES completion:^{}];
    5.     
    6.     UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    7.     /* 此处info 有六个值 
    8.      * UIImagePickerControllerMediaType; // an NSString UTTypeImage)
    9.      * 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. }
    复制代码
    七、保存图片
    高保真压缩图片方法
    1. NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality
    2. )
    复制代码
    此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。

    1. #pragma mark - 保存图片至沙盒
    2. - (void) saveImage:(UIImage *)currentImage withName:(NSString *)imageName
    3. {
    4.     
    5.     NSData *imageData = UIImageJPEGRepresentation(currentImage, 0.5);
    6.     // 获取沙盒目录
    7.     
    8.     NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
    9.     // 将图片写入文件
    10.     
    11.     [imageData writeToFile:fullPath atomically:NO];
    12. }
    复制代码
    八、实现点击图片预览功能,滑动放大缩小,带动画 
    1. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    2. {
    3.     
    4.     isFullScreen = !isFullScreen;
    5.     UITouch *touch = [touches anyObject];
    6.     
    7.     CGPoint touchPoint = [touch locationInView:self.view];
    8.     
    9.     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详细讲述,只贴出部分代码

    1. ASIFormDataRequest *requestReport  = [[ASIFormDataRequest alloc] initWithURL:服务器地址];

    2. NSString *Path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
    3.               
    4. [requestReport setFile:Path forKey:@"picturepath"];

    5. [requestReport buildPostBody];

    6. requestReport.delegate = self;

    7. [requestReport startAsynchronous];
    复制代码

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

  • 相关阅读:
    随机验证码生成
    python之map和filter
    Json学习笔记
    动态规划求区间最值问题RMQ(Range Minimum/Maximum Query)
    积水问题
    5亿个数找中位数
    Linux下进程间通信:命名管道mkfifo
    Trie树总结
    树的公共祖先问题LCA
    类文件结构
  • 原文地址:https://www.cnblogs.com/liuqixu/p/4683980.html
Copyright © 2020-2023  润新知