在项目开发的过程中,我们经常会使用的iPhone 或者 iPad 的拍照功能,比如给用户设置头像,一般都会用到拍照功能。我们可以使用UIImagePickerController 类来调用iPhone的摄像头进行拍照或者录视频。iOS 已经为我们封装好了UIImagePickerController ,使用很简单,让我们不用花费很多时间就可以调用拍照功能。使用UIImagePickerController时,需要实现UIImagePickerController协议。
在xib中添加一个按钮,绑定按钮的响应事件,在响应事件中添加如下代码:
01 | UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera; |
03 | if (![UIImagePickerController isSourceTypeAvailable:sourceType]) |
05 | sourceType = UIImagePickerControllerSourceTypePhotoLibrary; |
08 | UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; |
09 | imagePickerController.delegate = self; |
10 | imagePickerController.sourceType = sourceType; |
11 | imagePickerController.allowsEditing = YES; |
12 | [self presentViewController:imagePickerController animated:YES completion:nil]; |
13 | [imagePickerController release]; |
记得要实现UIImagePickerControllerDelegate 中 的-
(
void
)imagePickerController:(
UIImagePickerController
*)picker didFinishPickingMediaWithInfo:(
NSDictionary
*)info 和 -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 两个方法,分别时拍照完成的时候调用 和 取消拍照的时候调用。代码如下: 02 | #pragma mark UIImagePickerController Method |
04 | -( void )imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info |
06 | [picker dismissViewControllerAnimated:YES completion:^{}]; |
07 | UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; |
09 | image = [info objectForKey:UIImagePickerControllerOriginalImage]; |
11 | [self performSelector:@selector(saveImage:) withObject:image]; |
15 | -( void )imagePickerControllerDidCancel:(UIImagePickerController *)picker |
17 | [picker dismissViewControllerAnimated:YES completion:nil]; |
21 | -( void )saveImage:(UIImage *)image |
24 | NSData *imageData = UIImagePNGRepresentation(image); |
27 | imageData = UIImageJPEGRepresentation(image, 1.0); |
30 | NSDate *date = [NSDate date]; |
32 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; |
33 | [formatter setDateFormat:@ "yyyyMMddHHmmss" ]; |
34 | _fileName = [[[formatter stringFromDate:date] stringByAppendingPathExtension:@ "png" ] retain]; |
37 | NSURL *saveURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:_fileName]; |
39 | [imageData writeToURL:saveURL atomically:YES]; |
|