UIImagePickerController的用法
阅读原文时间:2023年07月11日阅读:1

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

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

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

#import "ViewController.h"

@interface ViewController ()

//拍照

  • (IBAction)takePhoto:(id)sender;

    //拍电影

  • (IBAction)takeMovie:(id)sender;

    @property (weak, nonatomic) IBOutlet UIImageView *imgView;

    //选择照片

  • (IBAction)selectPhoto:(id)sender;

    //选择视频

  • (IBAction)selectVideo:(id)sender;

    @end

    @implementation ViewController

  • (void)viewDidLoad {
    [super viewDidLoad];

    //UIImagePickerController.访问用户相册 2.拍照,拍视频

    }

    //1.选取照片

  • (IBAction)selectPhoto:(id)sender {

    UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init];

    /*
    UIImagePickerControllerSourceTypePhotoLibrary,获取相册中所有的文件
    UIImagePickerControllerSourceTypeCamera,摄像头
    UIImagePickerControllerSourceTypeSavedPhotosAlbum,系统内置相册
    */

    //资源类型(资源来自哪里,可以来相册,摄像头)
    imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    //设置代理
    imagePickerCtrl.delegate = self;

    //弹出控制器
    [self presentViewController:imagePickerCtrl animated:YES completion:^{

     //弹出控制器完成调用的方法  

    }];

    }
    /**
    *
    * 2.选取视频
    */

  • (IBAction)selectVideo:(id)sender {

    UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init];

    imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    imagePickerCtrl.delegate = self;

    //指定媒体类型,图片(@"public.image"),视频(@"public.movie")
    imagePickerCtrl.mediaTypes = @[/*@"public.image",*/@"public.movie"];

    [self presentViewController:imagePickerCtrl animated:YES completion:NULL];

    }

    //3.拍照

  • (IBAction)takePhoto:(id)sender {

    UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init];

    imagePickerCtrl.delegate = self;

    //判断手机是否支持(前)摄像头
    if (![UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]) {

     UIAlertView \*alerView = \[\[UIAlertView alloc\] initWithTitle:@"提示" message:@"手机太渣,没有摄像头" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil\];  
     \[alerView show\];
    
     return;  

    }

    //指定资源来自摄像头
    imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:imagePickerCtrl animated:YES completion:NULL];

    }

    //4.拍视频

  • (IBAction)takeMovie:(id)sender {

    UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init];

    imagePickerCtrl.delegate = self;

    //指定资源来自摄像头
    imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeCamera;

    //设置资源类型
    imagePickerCtrl.mediaTypes = @[@"public.movie"];

    [self presentViewController:imagePickerCtrl animated:YES completion:NULL];
    }

    #pragma mark UIImagePickerControllerDelegate
    //选取完视频,或者照片调用的协议方法(不管是拍照,选相册,拍视频,选视频,最终都会调用此方法)

  • (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    NSLog(@"%@",info);

    //取出选择的照片
    UIImage *img = info[UIImagePickerControllerOriginalImage];

    //将选取的照片交给_imgView显示
    _imgView.image = img;

    //如果资源来自摄像头
    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {

     //将图片存到相册中调用的方法  (苹果建议的写法:好像必须要这样写)  
     //- (void)image:(UIImage \*)image didFinishSavingWithError:(NSError \*)error contextInfo:(void \*)contextInfo
    
     **UIImageWriteToSavedPhotosAlbum(img,** self, @selector(image:didFinishSavingWithError:contextInfo:), nil);  

    }

    //如果选中的是视频则可以通过UIImagePickerControllerMediaURL在字典中获取到选中的视频的URL

    //选取照片或视频后,关闭控制器
    [picker dismissViewControllerAnimated:YES completion:NULL];

    }

    //"取消"按钮被点击

  • (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

    NSLog(@"被关闭了");
    [picker dismissViewControllerAnimated:YES completion:NULL];

    }

  • (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{

    NSLog(@"照片保存到相册成功");
    }

    @end

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

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章