【学习ios之路:UI系列】点击更换头像实现从相册读取照片和拍照两种功能

功能如下:

1.点击头像,提示选择更换头像方式①相册 ②照相.

2.点击相册,实现通过读取系统相册,获取图片进行替换.

3.点击照相,通过摄像头照相,进行替换照片.

4.如果摄像头,弹出框警告.

代码如下:

1.通过UIActionSheet对象实现提示功能

   //创建对象
   UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:
                             @"提示" delegate:self cancelButtonTitle:@"取消"
                    destructiveButtonTitle:nil otherButtonTitles:@"相册",@"拍照", nil];
    //在视图上展示
    [actionSheet showInView:self.view];
    [actionSheet release];

2.实现相应代理事件,代理UIActionSheetDelegate,方法如下

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:
                                                     (NSInteger)buttonIndex {
    // 相册 0 拍照 1
    switch (buttonIndex) {
        case 0:
            //从相册中读取
            [self readImageFromAlbum];
            break;
        case 1:
            //拍照
            [self readImageFromCamera];
            break;
        default:
            break;
    }
}

3.实现从相册读取图片功能,代码如下

//从相册中读取
- (void)readImageFromAlbum {
    //创建对象
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    //(选择类型)表示仅仅从相册中选取照片
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    //指定代理,因此我们要实现UIImagePickerControllerDelegate,
                                               UINavigationControllerDelegate协议
    imagePicker.delegate = self;
    //设置在相册选完照片后,是否跳到编辑模式进行图片剪裁。(允许用户编辑)
    imagePicker.allowsEditing = YES;
    //显示相册
    [self presentViewController:imagePicker animated:YES completion:nil];
    [imagePicker release];

}

4.实现拍照功能

- (void)readImageFromCamera {

    if ([UIImagePickerController isSourceTypeAvailable:
                                         UIImagePickerControllerSourceTypeCamera]) {
       UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        imagePicker.delegate = self;
        imagePicker.allowsEditing = YES; //允许用户编辑
        [self presentViewController:imagePicker animated:YES completion:nil];
        [imagePicker release];
    } else {
        //弹出窗口响应点击事件
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告"
                      message:@"未检测到摄像头" delegate:nil cancelButtonTitle:nil
                                              otherButtonTitles:@"确定", nil];
        [alert show];
        [alert release];
    }
}

5.图片完成处理后提交,代理方法UIPickerControllerDelegate

//图片完成之后处理

- (void)imagePickerController:(UIImagePickerController *)picker
     didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {

   //image 就是修改后的照片
    //将图片添加到对应的视图上
    [button setImage:image forState:UIControlStateNormal];
    //结束操作
    [self dismissViewControllerAnimated:YES completion:nil];
}
时间: 2024-10-12 23:29:45

【学习ios之路:UI系列】点击更换头像实现从相册读取照片和拍照两种功能的相关文章

【学习ios之路:UI系列】UIAlertView. UIActionSheet 和 UIAlertController

1.UIAlertView ①简单无代理模式,代码如下: UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"这是一个警告" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定",  @"按钮一", @"按钮二", nil

【学习ios之路:UI系列】iOS沙盒机制,文件读取,归档与反归档

1.IOS中的沙盒机制 IOS中的沙盒机制是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件等. 特点: 1.每个应用程序都在自己的沙盒内 2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容 3.应用程序向外请求或接收数据都需要经过权限认证 每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.如下图

【学习ios之路:UI系列】实现轮播图效果(UIImageView,UIScrollView,UIPageControl,NSTimer相结合)

实现效果,在不点击的情况下,自定滚动,点击时,停止.如下图 部分代码如下: //调用NSTimer方法,自定计时 - (void)autoScroll { self.timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self  selector:@selector(scrollToRight) userInfo:nil repeats:YES]; } //实现触发方法 - (void)scrollToRight { [UIVie

【学习ios之路:UI系列】UITabBarController , UIToorBar

1. UITabBarController(标签视图控制器),用来管理具有并列关系的视图控制器,多个界面同时存在. UITableBarController 和UINavigationController 类似, UITabBarController 也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例子就是QQ .微信等应?.效果如下图: ①使用UITabBarController步骤如下: (1) 初始化UITabBarController (2) 设置UIWindow的rootV

【学习ios之路:UI系列】ios中常见的几种控件.(UISlider,UISwitch,UIStepper,UISegmentedControl)

一.滑块控件(UISlider)  效果如下 注:系统原来效果如下 具体功能运用: ①创建滑块控件(UISlider),设置控件大小,并添加到window视图上,后释放 UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(20, 30, 280, 100)]; [self.window addSubview:slider];  [slider release]; ②设置最大值,最小值,以及开始时滑动条所在的位置 //设置最大

【学习ios之路:UI系列】(UISearchBar,UISearchDisplayController) 和UISearchController(iOS8新特性)

1.UISearchBar(效果如下:) ①创建UISearchBar对象 //初始化,定义frame UISearchBar *bar = [[UISearchBar alloc] initWithFrame:CGRectMake (0, 50, self.view.frame.size.width, 80)]; //添加到控制器的视图上 [self.view addSubview:bar]; ②UISerachBar的属性 //autocapitalizationType:包含4种类型,但是

【学习ios之路:UI系列】获取通过UIImagePackerController获取的系统相册图片的名称信息

通过IUImagePickerController方法获取系统的相册,而想要得到从系统相册得到的图片的信息需要以下几步: 1:获得从UIImagePicker选择的照片的Assert: 2:得到Assert的ALAssertRepresentation: 3:ALAssertRepresentation有个filename的属性 代码具体如下: 该方法是UIImagePickerController中的代理中的方法 - (void)imagePickerController:(UIImagePi

【学习ios之路:UI系列】UIProgressView

实现类似读取数据进度条效果 代码如下: ①创建UIProgressView对象 1)定义属性 { NSTimer *_proTimer;//计时 } @property (nonatomic, retain) UIProgressView *proView; //显示进度信息 @property (nonatomic, retain) UILabel *proLabel; @property (nonatomic, assign) float proValue;//保存进度值 //创建控件UIP

【学习ios之路:UI系列】NSPredicate相关用法

NSPredicate NSPredicate是一个Foundation类,它指定数据被获取或者过滤的方式. 它的查询语言就像SQL的WHERE和正则表达式的交叉一样,提供了具有表现力的,自然语言界面来定义一个集合被搜寻的逻辑条件. NSPredicate的几种用法 ①常见形式 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == 'zhangdan'"]; //注意:如果谓词串中的文本块未被引用,则被看