从相册或相机获取图片
Demo:http://download.csdn.net/detail/u012881779/8659199
拍照要使用真机测试,iPhone和iPad打开相册方式会有所区别:
for iphone:
#import "IPhoneViewController.h"
@interface IPhoneViewController () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
// 从相册获取图片
@property (strong, nonatomic) UIImagePickerController *ymImagePickerAlbum;
// 从相机获取图片
@property (strong, nonatomic) UIImagePickerController *ymImagePickerCamera;
// 显示图片
@property (weak, nonatomic) IBOutlet UIImageView *accordingImageView;
@end
@implementation IPhoneViewController
@synthesize ymImagePickerAlbum = _ymImagePickerAlbum;
@synthesize ymImagePickerCamera = _ymImagePickerCamera;
- (void)viewDidLoad {
[super viewDidLoad];
[_accordingImageView.layer setBorderWidth:2.0];
[_accordingImageView.layer setBorderColor:[[UIColor colorWithRed:0/255.0 green:89/255.0 blue:185/255.0 alpha:1] CGColor]];
}
- (IBAction)returnAction:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
- (IBAction)cameraAction:(id)sender {
[self pickImageFromCamera];
}
- (IBAction)photoAction:(id)sender {
[self pickImageFromAlbum];
}
// 清空显示图片
- (IBAction)cleanAction:(id)sender {
[_accordingImageView setImage:nil];
}
// 从用户相册获取图片
- (void)pickImageFromAlbum {
_ymImagePickerAlbum = nil;
_ymImagePickerAlbum = [[UIImagePickerController alloc] init];
_ymImagePickerAlbum.delegate = self;
_ymImagePickerAlbum.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; // 途径
_ymImagePickerAlbum.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
_ymImagePickerAlbum.allowsEditing = YES;
[self presentViewController:_ymImagePickerAlbum animated:YES completion:^{}];
}
// 从摄像头获取图片
- (void)pickImageFromCamera {
_ymImagePickerCamera = nil;
_ymImagePickerCamera = [[UIImagePickerController alloc] init];
_ymImagePickerCamera.delegate = self;
_ymImagePickerCamera.sourceType = UIImagePickerControllerSourceTypeCamera;
_ymImagePickerCamera.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
_ymImagePickerCamera.allowsEditing = YES;
[self presentViewController:_ymImagePickerCamera animated:YES completion:^{}];
}
#pragma mark UIImagePickerControllerDelegate
// 完成图片选择后执行
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *img = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
// 若是从相机取图片
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
[_accordingImageView setImage:img];
} else { // 相册
[_accordingImageView setImage:img];
}
[self dismissViewControllerAnimated:YES completion:^{}];
}
// 不选择图片,点击取消后执行
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[self dismissViewControllerAnimated:YES completion:^{}];
}
@end
for ipad:
#import "IPadViewController.h"
@interface IPadViewController () <UIImagePickerControllerDelegate, UINavigationControllerDelegate ,UIPopoverControllerDelegate>{
}
@property (strong, nonatomic) UIImagePickerController *pickerController;
@property (strong, nonatomic) UIPopoverController *poverController;
// 显示图片
@property (weak, nonatomic) IBOutlet UIImageView *accordingImageView;
@end
@implementation IPadViewController
@synthesize pickerController = _pickerController;
@synthesize poverController = _poverController;
- (void)viewDidLoad {
[super viewDidLoad];
[_accordingImageView.layer setBorderWidth:2.0];
[_accordingImageView.layer setBorderColor:[[UIColor colorWithRed:0/255.0 green:89/255.0 blue:185/255.0 alpha:1] CGColor]];
}
- (IBAction)returnPageAction:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
// 清空显示图片
- (IBAction)cleanAction:(id)sender {
[_accordingImageView setImage:nil];
}
// 响应点击事件
- (IBAction)saveAction:(id)sender {
_pickerController = nil;
_poverController = nil;
[self gPlot:sender];
}
- (void)gPlot:(id)sender {
NSInteger tag = [sender tag];
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{
} completion:^(BOOL finished) {
if (finished) {
if (tag == 13) { // 拍照
[self presentImageViewControllerWithCameraAvailable:1];
} else if (tag == 12) { // 手机相册
[self presentImageViewControllerWithCameraAvailable:0];
}
}
}];
}
- (void)presentImageViewControllerWithCameraAvailable:(NSUInteger)isAvaiable {
if (!_pickerController) {
_pickerController = [[UIImagePickerController alloc] init];
_pickerController.delegate = self;
}
if (isAvaiable == 1) {
if (![UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]) {
UIAlertView* alertView =
[[UIAlertView alloc] initWithTitle:nil
message:@"设备不支持拍照"
delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles: nil];
[alertView show];
return;
}
_pickerController.view.tag = 123 + 1;
_pickerController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
_pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:_pickerController animated:YES completion:nil];
} else {
_pickerController.view.tag = 123 + 2;
_pickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
_pickerController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
_pickerController.allowsEditing = YES;
// 所以我们必须通过UIPopoverController来实现才行。具体实现如下:
_poverController = [[UIPopoverController alloc] initWithContentViewController:_pickerController];
_poverController.popoverContentSize = self.view.frame.size;
// contentSize
[_poverController presentPopoverFromRect:CGRectMake(95, 235, 300, 300) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown|UIPopoverArrowDirectionLeft animated:YES];
}
}
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage *sourceImage = (UIImage *)[info valueForKey:UIImagePickerControllerOriginalImage];
if (sourceImage != nil) {
[_accordingImageView setImage:sourceImage];
} else {
[_accordingImageView setImage:sourceImage];
}
// 拍照
if (_pickerController.view.tag == 123 + 1) {
[picker dismissViewControllerAnimated:NO completion:NULL];
} else {
[_poverController dismissPopoverAnimated:NO];
}
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:NULL];
}
@end
示图: