在实际的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的基本用法随后更新!!! 记得关注我哟!!!!
时间: 2024-10-24 17:19:59