• UIImagePickerController的用法


    在实际的APP开发中,我们经常会见到应用的这样的功能 :需要选取手机相册的照片,还有选取视频,拍视频和照相的操作.

    在iOS开发中,实现以上的功能就需要用到 UIImagePickerController.

    现将 UIImagePickerController的基本用法总结如下 :

      1 #import "ViewController.h"
      2 
      3 @interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
      4 
      5 //拍照
      6 - (IBAction)takePhoto:(id)sender;
      7 
      8 //拍电影
      9 - (IBAction)takeMovie:(id)sender;
     10 
     11 @property (weak, nonatomic) IBOutlet UIImageView *imgView;
     12 
     13 //选择照片
     14 - (IBAction)selectPhoto:(id)sender;
     15 
     16 //选择视频
     17 - (IBAction)selectVideo:(id)sender;
     18 
     19 
     20 @end
     21 
     22 @implementation ViewController
     23 
     24 - (void)viewDidLoad {
     25     [super viewDidLoad];
     26     
     27     //UIImagePickerController.访问用户相册 2.拍照,拍视频
     28     
     29 }
     30 
     31 //1.选取照片
     32 - (IBAction)selectPhoto:(id)sender {
     33     
     34     UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init];
     35     
     36     /*
     37     UIImagePickerControllerSourceTypePhotoLibrary,获取相册中所有的文件
     38     UIImagePickerControllerSourceTypeCamera,摄像头
     39     UIImagePickerControllerSourceTypeSavedPhotosAlbum,系统内置相册
     40      */
     41 
     42     //资源类型(资源来自哪里,可以来相册,摄像头)
     43     imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
     44     
     45     //设置代理
     46     imagePickerCtrl.delegate = self;
     47     
     48     //弹出控制器
     49     [self presentViewController:imagePickerCtrl animated:YES completion:^{
     50        
     51         //弹出控制器完成调用的方法
     52     }];
     53     
     54 }
     55 /**
     56  *
     57  * 2.选取视频
     58  */
     59 - (IBAction)selectVideo:(id)sender {
     60     
     61      UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init];
     62     
     63     imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
     64     imagePickerCtrl.delegate = self;
     65     
     66     //指定媒体类型,图片(@"public.image"),视频(@"public.movie")
     67     imagePickerCtrl.mediaTypes = @[/*@"public.image",*/@"public.movie"];
     68     
     69     [self presentViewController:imagePickerCtrl animated:YES completion:NULL];
     70     
     71     
     72 }
     73 
     74 //3.拍照
     75 - (IBAction)takePhoto:(id)sender {
     76 
     77     UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init];
     78     
     79     imagePickerCtrl.delegate = self;
     80     
     81     //判断手机是否支持(前)摄像头
     82     if (![UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]) {
     83         
     84         UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"手机太渣,没有摄像头" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
     85         [alerView show];
     86         
     87         return;
     88     }
     89     
     90     //指定资源来自摄像头
     91     imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeCamera;
     92     
     93     [self presentViewController:imagePickerCtrl animated:YES completion:NULL];
     94     
     95 
     96 }
     97 
     98 //4.拍视频
     99 - (IBAction)takeMovie:(id)sender {
    100     
    101     UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init];
    102     
    103     imagePickerCtrl.delegate = self;
    104 
    105     //指定资源来自摄像头
    106     imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeCamera;
    107     
    108     //设置资源类型
    109     imagePickerCtrl.mediaTypes = @[@"public.movie"];
    110     
    111     [self presentViewController:imagePickerCtrl animated:YES completion:NULL];
    112 }
    113 
    114 #pragma mark UIImagePickerControllerDelegate
    115 //选取完视频,或者照片调用的协议方法(不管是拍照,选相册,拍视频,选视频,最终都会调用此方法)
    116 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    117 
    118     NSLog(@"%@",info);
    119     
    120     //取出选择的照片
    121     UIImage *img = info[UIImagePickerControllerOriginalImage];
    122     
    123     //将选取的照片交给_imgView显示
    124     _imgView.image = img;
    125     
    126     
    127     //如果资源来自摄像头
    128     if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
    129         
    130         //将图片存到相册中调用的方法  (苹果建议的写法:好像必须要这样写)
    131         //- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
    132         
    133         UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    134     }
    135     
    136     //如果选中的是视频则可以通过UIImagePickerControllerMediaURL在字典中获取到选中的视频的URL
    137    
    138     //选取照片或视频后,关闭控制器
    139     [picker dismissViewControllerAnimated:YES completion:NULL];
    140     
    141 }
    142 
    143 //"取消"按钮被点击
    144 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    145 
    146     NSLog(@"被关闭了");
    147     [picker dismissViewControllerAnimated:YES completion:NULL];
    148 
    149 }
    150 
    151 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    152     
    153     NSLog(@"照片保存到相册成功");
    154 }
    155 
    156 @end

    这种写法的缺点就是,选取图片的时候只能选取一张照片,如果要选取多张照片的话,就需要用到另外一种方法  AssetsLibrary

    AssetsLibrary的基本用法随后更新!!!    记得关注我哟!!!!

  • 相关阅读:
    Angularjs基础(五)
    Angularjs基础(四)
    Angularjs基础(三)
    Angularjs基础(二)
    mybatis入门基础----高级映射(一对一,一对多,多对多)
    干货 | 一文带你了解携程第四代全链路测试系统
    单例模式三种模式,饿汉(饥汉)、饱汉(懒汉)、双重锁模式
    MyBatis学习总结之一对多映射
    MyBatis学习总结之一对一映射
    SimpleTrigger的使用
  • 原文地址:https://www.cnblogs.com/pengsi/p/4888188.html
Copyright © 2020-2023  润新知