ios开发之调用相机和本地相册

ios调用本地相机和相册, 非常实用的小功能, 一般做上传头像的时候会用到的比较多. 我用的是iPhone5做的测试, 没有出现什么问题. 用真机测试的主要原因是模拟器无法实现拍照功能, 拍照功能只能在真机上调用.下面是我的一些代码, 写的比较粗糙, 但是简单易懂.

// 首先来写一些委托 定义一个全局变量
@interface TestViewController : UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate>
{
    UIActionSheet *myActionSheet;
}

  以上是.h中的代码, 接下来开始写.m中的 至于window创建我就不给列出了

// 首先创建一个button和一个imageView button点击调出拍照或本地相册上传图片方法, imageView负责显示图片 , 把他们都加入到view中
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(100, 100, 100, 100);
    button.backgroundColor = [UIColor redColor];

    [button addTarget:self action:@selector(openMenu) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];

    self.img = [[UIImageView alloc] initWithFrame:
                               CGRectMake(0, 220, self.view.frame.size.width, self.view.frame.size.height)]; // 这个imageView我设置的比较大了一点 - -
    self.img.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:_img];

  接下来是button的点击方法

-(void)openMenu
{
    //这里面用的是ActionSheet
    myActionSheet = [[UIActionSheet alloc]
                 initWithTitle:nil
                 delegate:self
                 cancelButtonTitle:@"取消"
                 destructiveButtonTitle:nil
                 otherButtonTitles: @"打开相机", @"从相册获取",nil];

    [myActionSheet showInView:self.view];  

}

  然后是ActionSheet的代理方法 和 拍照与本地相册的调用功能实现

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{ 

    //呼出的菜单按钮点击后的响应
    if (buttonIndex == myActionSheet.cancelButtonIndex)
    {
        NSLog(@"取消");
    }

    switch (buttonIndex)
    {
        case 0:  //打开照相机拍照
            [self takePhoto];
            break; 

        case 1:  //打开本地相册
            [self LocalPhoto];
            break;
    }
}

//开始拍照
-(void)takePhoto
{
    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
    {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;
        //设置拍照后的图片可被编辑
        picker.allowsEditing = YES;
        picker.sourceType = sourceType;
        [self presentModalViewController:picker animated:YES];
    }else
    {
        NSLog(@"模拟其中无法打开照相机,请在真机中使用");
    }
}

//打开本地相册
-(void)LocalPhoto
{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];

    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    picker.delegate = self;
    //设置选择后的图片可被编辑
    picker.allowsEditing = YES;
    [self presentModalViewController:picker animated:YES];
}

  

UIImagePickerController的代理方法:

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

    NSString *type = [info objectForKey:UIImagePickerControllerMediaType];

    //当选择的类型是图片
    if ([type isEqualToString:@"public.image"])
    {
        //先把图片转成NSData
        UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
        NSData *data;
        if (UIImagePNGRepresentation(image) == nil)
        {
            data = UIImageJPEGRepresentation(image, 1.0);
        }
        else
        {
            data = UIImagePNGRepresentation(image);
        }

        //图片保存的路径
        //这里将图片放在沙盒的documents文件夹中
        NSString * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];  

        //文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];

        //把刚刚图片转换的data对象拷贝至沙盒中 并保存为image.png
        [fileManager createDirectoryAtPath:DocumentsPath withIntermediateDirectories:YES attributes:nil error:nil];

        [fileManager createFileAtPath:[DocumentsPath stringByAppendingString:@"/image.png"] contents:data attributes:nil];
        //关闭相册界面
        [picker dismissModalViewControllerAnimated:YES];

        _img.image = image;

    } 

}

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

  这样就ok了

时间: 2024-11-04 12:24:16

ios开发之调用相机和本地相册的相关文章

iOS开发之调用手机摄像头和相册

//按钮的点击方法- (void)catchImage { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"请选择" message:@"选取照片" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"相机&

iOS开发之保存照片到系统相册(Photo Album)

iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIImageView 创建UIImageView是为了将照片展示出来,我们是要把UIImage保存到系统相册(Photo Album): #define SCREEN [UIScreen mainScreen].bounds.size self.image = [UIImage imageNamed:@"i

IOS研究院之打开照相机与本地相册选择图片

如下图所示 在本地相册中选择一张图片后,我们将他拷贝至沙盒当中,在客户端中将它的缩略图放在按钮旁边,这个结构其实和新浪微薄中选择图片后的效果一样.最终点击发送将按钮将图片2进制图片上传服务器. 下面我们仔细学习具体的细节.创建一个空的IOS项目,接着在创建一个ViewController. AppDelegate.h 应用的代理类 这个没什么好说的就是直接打开刚刚创建的新ViewController. 1 #import <UIKit/UIKit.h> 2 #import "Test

iOS 开发调用相机以及获取相册照片功能

//添加代理方法 @interface MineViewController () <UITableViewDelegate, UITableViewDataSource, PayCellDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIActionSheetDelegate> //定义消息框 UIActionSheet * act =[[UIActionSheet alloc]initWi

iOS开发笔记1:ToDoList、相册、地图应用及新浪微博

前段时间做了一些小东西,一些关键点记录总结如下 1.ToDoList 主要是使用UITableView以及NSUserDefaults完成任务管理,可新建.编辑及删除任务. 因为是Demo性质,所以利用NSUserDefaults做数据持久化,作为一个plist存储在应用的沙盒里.需要注意的是更新数据时需要立即同步一下“[[NSUserDefaults standardUserDefaults] synchronize]”,防止遇到异常情况如应用崩溃导致数据丢失等. 进入应用时,再从沙盒里读取已

iOS学习:调用相机,选择图片上传,带预览功能

一.新建工程 <ignore_js_op> 二.拖控件,创建映射 <ignore_js_op> 三.在.h中加入delegate @interface ViewController : UIViewController 复制代码 四.实现按钮事件 -(IBAction)chooseImage:(id)sender { UIActionSheet *sheet; // 判断是否支持相机 if([UIImagePickerController isSourceTypeAvailable

iOS开发&gt;学无止境 - 保存照片到系统相册(Photo Album)

保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIImageView 创建UIImageView是为了将照片展示出来,我们是要把UIImage保存到系统相册(Photo Album): #define SCREEN [UIScreen mainScreen].bounds.size self.image = [UIImage imageNamed:@"iOSDevTip"]; UIImageView

iOS开发-方法调用在运行时的过程

方法调用在运行时的过程 如果用实例对象调用实例方法,会到实例的isa指针指向的对象(也就是类对象)操作. 如果调用的是类方法,就会到类对象的isa指针指向的对象(也就是元类对象)中操作. 首先,在相应操作的对象中的缓存方法列表中找调用的方法,如果找到,转向相应实现并执行. 如果没找到,在相应操作的对象中的方法列表中找调用的方法,如果找到,转向相应实现执行 如果没找到,去父类指针所指向的对象中执行1,2. 以此类推,如果一直到根类还没找到,转向拦截调用. 如果没有重写拦截调用的方法,程序报错. 以

iOS开发——实用技术OC篇&amp;关于自定义相册删除复活的实现

关于自定义相册删除复活的实现 在这里(http://www.cnblogs.com/iCocos/p/4705585.html)我们提到了. 1:简单的实现了获取系统相册图片并且保存图片到系统相册 2:定义自定义的相册,并且保存到自定义相册 这里久以一个简单的例子实现一个上面的所有功能,并且添加一个很有用的功能实现 App中自定义的相册呗删除之后再次保存相片无法成功 这里使用的是一个系统的库:ALAssetsLibrary 先来看看咱们取得相册中的相片 1 - (void)getAllPhoto