现在的位置: 首页 > 综合 > 正文

IOS学习笔记19—UIImagePickerController(图像选取器)

2013年07月15日 ⁄ 综合 ⁄ 共 2921字 ⁄ 字号 评论关闭

UIImagePickerController是一种导航控制器,使用它,用户可以打开系统的图片选取器或者打开相机进行拍照。实现协议UIImagePickerDelegate中定义的委托方法可以对选定后的结果进行操作,或是没有选择取消的操作。


UIImagePickerController有三个图片源:

UIImagePickerControllerSourceTypePhotoLibrary:照片库

UIImagePickerControllerSourceTypeCamera:使用相机拍摄的新图片

UIImagePickerControllerSourceTypeSavedPhotosAlbum:相机胶卷


另外,显示选择图像视图器之前要确保图像源是否可用,可以使用isSourceTypeAvailable方法来检验


详情在代码中有注释,上代码:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate]]>//打开模态视图控制器用到了导航控制器的委托方法
@property (retain, nonatomic) IBOutletUIImageView *imageView;

@end

ViewController.m
#import "ViewController.h"

@interface ViewController ()
{

}
@end


@implementation ViewController
@synthesize imageView;

- (void)viewDidLoad
{
    [superviewDidLoad];
// 通过代码构建按钮
    UIButton *pickerImageBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    pickerImageBtn.frame = CGRectMake(90, 100, 150, 50);
    [pickerImageBtn setTitle:@"打开相册" forState:UIControlStateNormal];
    //指定单击事件
    [pickerImageBtn addTarget:self action:@selector(openImage)  forControlEvents:UIControlEventTouchUpInside];
    [self.viewaddSubview:pickerImageBtn];
}

/*
 点击按钮后的事件
 */
-(void)openImage
{
    //把状态栏隐藏起来
//    UIApplication *app = [UIApplication sharedApplication];
//    app.statusBarHidden = YES;
    
    //构建图像选择器
    UIImagePickerController *pickerController = [[UIImagePickerControlleralloc] init];
    //设置代理为本身(实现了UIImagePickerControllerDelegate协议)
    pickerController.delegate = self;
    //是否允许对选中的图片进行编辑
    pickerController.allowsEditing = YES;
    
    //设置图像来源类型(先判断系统中哪种图像源是可用的)
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    }elseif([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){
        pickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    }else {
        pickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    }
    //打开模态视图控制器选择图像
    [selfpresentModalViewController:pickerController animated:YES];
}

/*
 选取成功后在界面上进行显示
 */
-(void)editedImage:(UIImage *)image
{
    NSLog(@"选择成功");
    [imageViewsetImage:image];
}

#pragma -
#pragma Delegate methods
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
    [picker dismissModalViewControllerAnimated:YES];
    [selfperformSelector:@selector(editedImage:) withObject:image afterDelay:.5];
}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    NSLog(@"取消选择");
    [picker dismissModalViewControllerAnimated:YES];
}

- (void)viewDidUnload
{
    [selfsetImageView:nil];
    [superviewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)dealloc {
    [imageViewrelease];
    [superdealloc];
}
@end

最后看看运行效果:

                

对Android&IOS感兴趣的朋友可以加入我们的讨论QQ群,在这里,我们只讨论干货:

iOS群:220223507

Android群:282552849


欢迎关注我的新浪微博和我交流:@唐韧_Ryan

抱歉!评论已关闭.