在iOS中,系统提供了一个拍照视图控制器UIImagePickerController,UIImagePickerController继承于UIViewController,能够直接present出来。spa
在一个按钮事件里调出拍照界面来
3d
- (IBAction)click:(id)sender {orm
self.controller = [[UIImagePickerController alloc]init];继承
if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) {事件
self.controller.delegate = self;图片
self.controller.allowsEditing = YES;ip
self.controller.sourceType = UIImagePickerControllerSourceTypeCamera;//或者UIImagePickerControllerSourceTypeSavedPhotosAlbumit
self.controller.cameraDevice = UIImagePickerControllerCameraDeviceRear;io
[self presentViewController:self.controller animated:YES completion:nil];cli
} 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;