您的位置:首页 > 移动开发 > IOS开发

iOS-简单拍照/取照片

2015-12-22 00:00 405 查看
在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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: