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;
在一个按钮事件里调出拍照界面来
- (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;
相关文章推荐
- iOS多线程GCD
- IOS 设置多个button,点击切换颜色
- 初探 iOS8 中的 Size Class
- IOS 在iphone中PopoverViewController的使用
- IOS TableViewCell分割线设置和隐藏多余cell
- iOS中文API之NSLayoutconstraint
- 蓝懿iOS 技术内容和心得 12.21
- iOS开发:同步方法中混杂异步方法,导致异步方法还没有回调,同步方法就返回了值,因此返回了nil。解决方法
- iOS 21种设计模式之原型模式Prototype
- iOS之动画总结
- iOS定位不调用代理方法的可能原因
- ios通知
- 为iOS应用提供技术支持
- 观察者模式 - 通知/KVO
- IOS沙盒Files目录说明和常用操作
- 在iOS中使用icon font
- iOS开发拓展篇—CoreLocation定位服务
- iOS屏幕尺寸和分辨率了解
- iOS中事件的传递和响应者链条
- 蓝懿IOS利用所学的控件做小游戏