在iOS中,系统提供了一个拍照视图控制器UIImagePickerController,UIImagePickerController继承于UIViewController,可以直接present出来。
在一个按钮事件里调出拍照界面来
- (IBAction)click:(id)sender {
self.controller = [[UIImagePickerController alloc]init];
if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) {
self.controller.delegate = self;
self.controller.allowsEditing = YES;
self.controller.sourceType = UIImagePickerControllerSourceTypeCamera;//或者UIImagePickerControllerSourceTypeSavedPhotosAlbum
self.controller.cameraDevice = UIImagePickerControllerCameraDeviceRear;
[self presentViewController:self.controller animated:YES completion:nil];
} else {
NSLog(@"camera is not avaliable.");
}
}
让这个试图控制器遵循UINavigationControllerDelegate, UIImagePickerControllerDelegate协议
实现UIImagePickerControllerDelegate协议里的相应方法即可。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info ;
上面的方法拍完照片和取照片都会走。
例如
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
NSLog(@"%@", info);
//不写dismiss方法的话还在拍照界面
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
if (image == nil) {
image = [info objectForKey:UIImagePickerControllerOriginalImage];
}
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
// [self dismissViewControllerAnimated:YES completion:nil];
UIImagePickerController *controller = [[UIImagePickerController alloc]init];
controller.delegate = self;
controller.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;//为什么到不了照片库啊?
[self.controller presentViewController:controller animated:YES completion:nil];
} else if (picker.sourceType == UIImagePickerControllerSourceTypeSavedPhotosAlbum) {
//image指选中的图片
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
if (image == nil) {
image = [info objectForKey:UIImagePickerControllerOriginalImage];
}
self.imageView.image = image;
// [picker dismissViewControllerAnimated:YES completion:nil];
// [self.controller dismissViewControllerAnimated:YES completion:nil];
} else if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
}
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
if (error == nil) {
NSLog(@"save successfully");
} else {
NSLog(@"saving camera has a problem");
NSLog(@"%@", [error description]);
}
}
取消走下面方法:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
来源:oschina
链接:https://my.oschina.net/u/2560887/blog/549130