iOS中 读取相册,调用系统相机 技术分享

简介: 技术内容:分别读取相册以及调取相机,将图片显示到imageView上 布局: 1.创建imageView 和 button 并为button一个关联pickerImage的事件 self.

技术内容:分别读取相册以及调取相机,将图片显示到imageView上

布局:

1.创建imageView 和 button 并为button一个关联pickerImage的事件

<div style="text-align: left;"><span style="font-family: Helvetica; -webkit-text-stroke-width: initial;">    self.aImageView = [[UIImageView alloc]initWithFrame:CGRectMake(60, 100, 200, 200)];</span></div>    self.aImageView.backgroundColor = [UIColor redColor];
    self.aImageView.userInteractionEnabled = YES;
    
    self.aButton = [[UIButton alloc]initWithFrame:CGRectMake(98, 350, 125, 25)];
    self.aButton.backgroundColor = [UIColor blueColor];
    [self.aButton addTarget:self action:@selector(pickerImage:) forControlEvents:(UIControlEventTouchUpInside)];
    [self.aButton setTitle:@"选择图像" forState:(UIControlStateNormal)];
    
    [self.view addSubview:self.aButton];
    [self.view addSubview:self.aImageView];
    [self.aButton release];
    [self.aImageView release];
    
    
    [self addTapGestureOnImageView];

2.因为有的场景需要直接点击图片更换别的图片,所以在imageView上添加轻拍动作

- (void)addTapGestureOnImageView{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(pickerImage:)];
    [self.aImageView addGestureRecognizer:tap];
    [tap release];
}

3.实现轻拍动作中方法

- (void)pickerImage:(UIButton *)button{
    //添加ActionSheet控件,提示选项框,调出相机或拍摄图片
    //第一个参数:是行为列表的标题 一般为空
    //第二个参数:遵循代理
    //第三个参数:取消这个操作按钮上 显示的文字
    //第四个参数:destructive 破坏性的, 毁灭性的 自己理解吧 反正我写的是拍照,执行操作的意思
    //第五个参数:从相册选取图片
    UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"拍照" otherButtonTitles:@"从相册选择图片", nil];
    //在当前界面显示actionSheet对象
    [actionSheet showInView:self.view];
    [actionSheet release];
}

4.实现action代理协议中的方法

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    switch (buttonIndex) {
        case 0:
            //调用系统相机,拍照
            [self pickerPictureFromCamera];
            break;
        case 1:
            [self pickerPictureFromPhotosAlbum];
        default:
            break;
    }
}

4.1从摄像头获取图片

- (void)pickerPictureFromCamera{
    
    //判断前摄像头是否可用,如果不可用的话,用后摄像头。如果后摄像头也不可用的话用手机图片库
    //判断前置摄像头是否可用
    if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]) {
        NSLog(@"用前置摄像头");
        
        self.imagePC = [[UIImagePickerController alloc]init];
        self.imagePC.cameraDevice = UIImagePickerControllerCameraDeviceFront;
        [self.imagePC release];
        //判断后置摄像头是否可用
    }else if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]){
        NSLog(@"用后置摄像头");
        
        self.imagePC = [[UIImagePickerController alloc]init];
        self.imagePC.cameraDevice = UIImagePickerControllerCameraDeviceRear;
        [self.imagePC release];
        //两者都不行的话,从手机相册调取照片
    }else{
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"调用摄像头失败" message:@"请从手机相册中选取照片" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alertView show];
        [alertView release];
    }
    
    //初始化图片控制器对象
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init];
    //sourceType资源样式
    //设置图片选择器选择图片的样式
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    //设置图片是否允许编辑
    imagePicker.allowsEditing = YES;
    //设置图片选择器代理对象为这个视图控制器
    imagePicker.delegate = self;
    //把相机推出来 模态
    [self presentViewController:imagePicker animated:YES completion:nil];
    //释放
    [imagePicker release];
    
}

4.2从手机的图片库获取图片

- (void)pickerPictureFromPhotosAlbum{
    //初始化图片控制器对象
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init];
    //sourceType资源样式
    //设置图片选择器选择图片的样式
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    //设置图片是否允许编辑
    imagePicker.allowsEditing = YES;
    //设置图片选择器代理对象为这个视图控制器
    imagePicker.delegate = self;
    //把选择控制器推出来 模态
    [self presentViewController:imagePicker animated:YES completion:nil];
    //释放
    [imagePicker release];
}

5.将选取好的照片保存到详情页的方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    //以相册作为字典,从中取出照片
    self.aImageView.image = [info objectForKey:UIImagePickerControllerEditedImage];
    //把选取框模态回去
    [self dismissViewControllerAnimated:YES completion:nil];
}
测试效果:(由于mac端虚拟机无前后摄像头所以直接跳转相册选取)



目录
相关文章
|
24天前
|
搜索推荐 Android开发 iOS开发
安卓与iOS系统的用户界面设计对比分析
本文通过对安卓和iOS两大操作系统的用户界面设计进行对比分析,探讨它们在设计理念、交互方式、视觉风格等方面的差异及各自特点,旨在帮助读者更好地理解和评估不同系统的用户体验。
18 1
|
2月前
|
搜索推荐 Android开发 iOS开发
探析安卓与iOS系统的优劣
【2月更文挑战第7天】安卓与iOS是当今手机市场上最主流的两款操作系统,各有优劣。本文将从用户体验、开放程度、生态系统等方面对两者进行深入探析,以期帮助读者更好地了解它们的特点。
|
2月前
|
Android开发 数据安全/隐私保护 iOS开发
安卓与iOS系统的发展趋势与比较分析
【2月更文挑战第6天】 在移动互联网时代,安卓和iOS系统作为两大主流移动操作系统,各自呈现出不同的发展趋势。本文将从技术角度出发,对安卓和iOS系统的发展方向、特点及未来趋势进行比较分析,以期为读者提供更深入的了解和思考。
35 4
|
1月前
|
机器学习/深度学习 测试技术 API
iOS系统下轻松构建自动化数据收集流程
iOS系统下轻松构建自动化数据收集流程
24 0
|
1月前
|
搜索推荐 安全 Android开发
安卓与iOS系统的用户体验比较
【2月更文挑战第11天】 在当今移动设备市场上,安卓和iOS系统一直是两大主流操作系统。本文将从用户界面设计、应用生态、系统定制性等方面对安卓和iOS系统进行比较分析,旨在探讨两者的优势和劣势,为用户选择合适的操作系统提供参考。
|
2月前
|
人工智能 vr&ar Android开发
探索安卓与iOS系统的发展趋势
【2月更文挑战第9天】 过去,人们对于安卓和iOS系统的争论主要集中在性能、用户体验和生态系统的比较上。然而,随着移动互联网的快速发展,两大操作系统在人工智能、物联网、安全性等方面的发展趋势也备受关注。本文将探讨安卓与iOS系统在技术发展方面的差异以及未来的发展趋势。
|
2月前
|
搜索推荐 Android开发 iOS开发
探讨安卓与iOS系统的用户体验差异
【2月更文挑战第7天】 在当今移动互联网时代,安卓和iOS系统是最受欢迎的手机操作系统。本文将从用户界面设计、应用生态系统、定制性能等方面探讨安卓与iOS系统的用户体验差异,为读者提供更深入的了解。
|
2月前
|
安全 开发工具 Android开发
安卓与iOS系统的优缺点比较
【2月更文挑战第6天】 安卓和iOS是目前市场上最流行的两种操作系统。虽然它们都拥有自己的独特之处,但它们也有一些共同之处。本文将探讨这两种操作系统的优缺点,并对它们进行比较。
|
2月前
|
搜索推荐 安全 Android开发
探索安卓与iOS系统的差异与共通之道
【2月更文挑战第4天】安卓与iOS作为当前主流的移动操作系统,各自拥有独特的特性和功能。本文将深入探讨安卓和iOS系统的差异,并提出一些共通之道,帮助读者更好地了解和应用这两个系统。
|
2月前
|
人工智能 vr&ar Android开发
探索安卓与iOS系统的技术进展
【2月更文挑战第4天】本文将探讨安卓与iOS两大操作系统在最新技术进展方面的差异与相似之处。我们将分析它们在人工智能、增强现实、隐私保护等方面的创新和发展,并展望未来可能出现的趋势。通过对比这两个操作系统的技术特点,读者将能够更好地了解并选择适合自己需求的智能设备。