1.UIImagePickerController的静态方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
imagepicker = [[UIImagePickerController alloc]init];
//UIImagePickerController静态方法判断设备是否支持照相机/图片库/相册功能
/*
 typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) { UIImagePickerControllerSourceTypePhotoLibrary,
 UIImagePickerControllerSourceTypeCamera,
 UIImagePickerControllerSourceTypeSavedPhotosAlbum
 };
 */
BOOL isCameraSupport = [UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
NSLog(@"support camera:%d",isCameraSupport);

//UIImagePickerController静态方法判断设备是否支持前置摄像头/后置摄像头
/*
 typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { UIImagePickerControllerCameraDeviceRear,
 UIImagePickerControllerCameraDeviceFront
 };
 */
BOOL isRearSupport = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
NSLog(@"rear support:%d",isRearSupport);

//UIImagePickerController静态方法判断设备是否支持前置摄像头闪光灯/后置摄像头闪光灯
/*
 typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { UIImagePickerControllerCameraDeviceRear,
 UIImagePickerControllerCameraDeviceFront
 };
 */
BOOL isFlushSupport = [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear];
NSLog(@"rear flash support:%d",isFlushSupport);

//UIImagePickerController静态方法返回前置摄像头/后置摄像头支持的拍摄类型
/*
 typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) { UIImagePickerControllerCameraDeviceRear,
 UIImagePickerControllerCameraDeviceFront
 };
 */
//返回类型有照片和视频
/*
 enum { UIImagePickerControllerCameraCaptureModePhoto,
 UIImagePickerControllerCameraCaptureModeVideo
 };
 typedef NSUInteger UIImagePickerControllerCameraCaptureMode;
 */
NSArray* captureModes = [UIImagePickerController availableCaptureModesForCameraDevice:UIImagePickerControllerCameraDeviceRear];
for (NSNumber* mode in captureModes) {    NSLog(@"capture modes:%d",[mode integerValue]);
}

//UIImagePickerController静态方法返回照相机/相册/照片库所支持的媒体类型
/*
 typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) { UIImagePickerControllerSourceTypePhotoLibrary,
 UIImagePickerControllerSourceTypeCamera,
 UIImagePickerControllerSourceTypeSavedPhotosAlbum
 };
 */
//返回类型有kUTTypeMovie,kUTTypeImage,其他类型均在<MobileCoreServices/MobileCoreServices.h>下
NSArray* mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
for (NSString* type in mediaTypes) {    NSLog(@"media types:%@",type);
}

2.UIImagePickerController属性详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//指定使用照相机模式,可以指定使用相册/照片库
imagepicker.sourceType = UIImagePickerControllerSourceTypeCamera;
//设置当拍照完或在相册选完照片后,是否跳到编辑模式进行图片剪裁。只有当showsCameraControls属性为
//true时才有效果
imagepicker.allowsEditing = YES;
//设置拍照时的下方的工具栏是否显示,如果需要自定义拍摄界面,则可把该工具栏隐藏
imagepicker.showsCameraControls  = YES;
//设置使用后置摄像头,可以使用前置摄像头
imagepicker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
//设置闪光灯模式
/*
 typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) { UIImagePickerControllerCameraFlashModeOff  = -1,
 UIImagePickerControllerCameraFlashModeAuto = 0,
 UIImagePickerControllerCameraFlashModeOn   = 1
 };
 */
imagepicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
//设置相机支持的类型,拍照和录像
imagepicker.mediaTypes = @[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie];
//设置拍摄时屏幕的view的transform属性,可以实现旋转,缩放功能
   // imagepicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI*45/180);
   // imagepicker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5);
//所有含有cameraXXX的属性都必须要sourceType是UIImagePickerControllerSourceTypeCamera时设置才有效
//果,否则会有异常
//设置UIImagePickerController的代理
imagepicker.delegate = self;

-(void)showCamera{//用模态方式呈现imagepicker
[self presentModalViewController:imagepicker animated:YES];
}

使用 imagepicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI*45/180);旋转45度的效果,瞬时间旋转45°

使用imagepicker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5);全屏的效果,同时 imagepicker.showsCameraControls =NO;隐藏工具栏: 

使用imagepicker.allowsEditing = YES;出现的图片编辑效果,只有当imagepicker.showsCameraControls = YES;才有效果: 

3.UIImagePickerController回调详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//成功获得相片还是视频后的回调
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{    //通过UIImagePickerControllerMediaType判断返回的是照片还是视频
    NSString* type = [info objectForKey:UIImagePickerControllerMediaType];
    //如果返回的type等于kUTTypeImage,代表返回的是照片,并且需要判断当前相机使用的sourcetype是拍照还是相册
    if ([type isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypeCamera)     {        //获取照片的原图
        UIImage* original = [info objectForKey:UIImagePickerControllerOriginalImage];
        //获取图片裁剪的图
        UIImage* edit = [info objectForKey:UIImagePickerControllerEditedImage];
        //获取图片裁剪后,剩下的图
        UIImage* crop = [info objectForKey:UIImagePickerControllerCropRect];
        //获取图片的url
        NSURL* url = [info objectForKey:UIImagePickerControllerMediaURL];
        //获取图片的metadata数据信息
        NSDictionary* metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];
        //如果是拍照的照片,则需要手动保存到本地,系统不会自动保存拍照成功后的照片
        UIImageWriteToSavedPhotosAlbum(edit, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    }else{
    }
    //模态方式退出uiimagepickercontroller
    [imagepicker dismissModalViewControllerAnimated:YES];
}
//取消照相机的回调
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{    //模态方式退出uiimagepickercontroller
    [imagepicker dismissModalViewControllerAnimated:YES];
}
//保存照片成功后的回调
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error
  contextInfo:(void *)contextInfo{
    NSLog(@"saved..");
}

4.自定义相机拍照画面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
   //设置拍照时的下方的工具栏是否显示,如果需要自定义拍摄界面,则可把该工具栏隐藏
    imagepicker.showsCameraControls  = NO;

    UIToolbar* tool = [[UIToolbar alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-55,
self.view.frame.size.width, 75)];
    tool.barStyle = UIBarStyleBlackTranslucent;
    UIBarButtonItem* cancel = [[UIBarButtonItem
alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self
action:@selector(cancelCamera)];
    UIBarButtonItem* add = [[UIBarButtonItem
alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self
action:@selector(savePhoto)];
    [tool setItems:[NSArray arrayWithObjects:cancel,add, nil]];
   //把自定义的view设置到imagepickercontroller的overlay属性中

   imagepicker.cameraOverlayView = tool;

-(void)cancelCamera{    [imagepicker dismissModalViewControllerAnimated:YES];
}
-(void)savePhoto{    //拍照,会自动回调- (void)imagePickerController:(UIImagePickerController *)picker
    //didFinishPickingMediaWithInfo:(NSDictionary *)info,对于自定义照相机界面,拍照后回调可以不退出
    //实现连续拍照效果
    [imagepicker takePicture];
}

5.UIImagePickerController是继承UINavigationController,所以可以push和pop一些viewcontroller进行导

航效果。例如,自定义照相机画面的时候可以在拍摄完后push一个viewcontroller用于对照片进行编辑。

原文来自:http://blog.csdn.net/kingsley_cxz/article/details/9157093

苹果拍照或者获取相册簿UIImagePickerController相关推荐

  1. Android拍照和获取相册图片

    之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过. 再也不要问度娘了,再也不用一堆博客里找啊找了... ---------------------------- ...

  2. 使用 微信JS-SDK 拍照 或者获取 相册 图片并展示

    最近有在微信公众号的项目需要使用照相机,所以研究了一下微信的拍照功能,以下是具体流程: 根据微信的开发文档,想要使用微信的jssdk,需要5个步骤:  (1)步骤一:绑定域名  先登录微信公众平台进入 ...

  3. 【Flutter】Flutter 拍照示例 ( 浮动按钮及点击事件 | 底部显示按钮组件 | 手势检测器组件 | 拍照并获取当前拍摄照片 | 从相册中选择图片 )

    文章目录 一.浮动按钮及点击事件 二.底部显示按钮组件 三.手势检测器组件 四.image_picker 完整代码示例 五.相关资源 一.浮动按钮及点击事件 一般使用 Scaffold 组件作为界面的 ...

  4. takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...

    TakePhoto是一款用于在Android设备上获取照片(拍照或从相册.文件中选择).裁剪图片.压缩图片的开源工具库,目前最新版本4.0.2. 3.0以下版本及API说明,详见TakePhoto2. ...

  5. 第三节 适配Android10的拍照、从相册获取代码,包括完整的权限申请和图片地址获取

    专栏目录 第一节 自定义轮播图的制作 第二节 底部导航栏菜单,炫酷菜单动画,背景变暗.按钮焦点获取 第三节 适配Android10的拍照.从相册获取代码,包括完整的权限申请和图片地址获取 第四节 百度 ...

  6. Android开发之获取相册照片和获取拍照照片

    在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: ...

  7. android 小米相册无法获取,适配小米华为手机等拍照后获取不到照片

    问题摘要:适配小米华为手机等拍照后获取不到照片 出现场景 普通的相机调用,在 intent 传进去一个路径,然调用这个意图. 在测试机 荣耀 8x 上是没有问题的,能获取到拍的照片. 在小米系统和 华 ...

  8. 相册权限_苹果手机惊现漏洞?App在未获取相册权限的情况下成功读取照片

    近日,知乎上网友爆料发现苹果手机存在漏洞,一款名叫"时间规划局"的App可在未获取相册权限的情况下读取照片.专家猜测可能是App调用了苹果的私有库,绕过了系统的授权机制. 2月26 ...

  9. Android 拍照、从相册选择图片

    在做Android图片上传功能的时候,获取图片的途径一般都有两种:拍照.从相册选择. 一.拍照 调用相机拍照有两种方法: 直接返回图片. 在调用相机的时候,传入uri,拍照后通过该uri来获取图片. ...

最新文章

  1. gradle平级项目引用
  2. LINUX上MYSQL优化三板斧
  3. php销毁three.js量,javascript – ThreeJS:从场景中删除对象
  4. 计算机360浏览器的大小,360安全浏览器8.1电脑正式版
  5. PHP于js的交互,关于php与js交互问题
  6. convert.todatetime指定日期格式_SQL基础知识V2——常用日期函数
  7. Azure实践之如何批量为资源组虚拟机创建alert
  8. 数字化转型难?那是你没搞懂这5个关键点
  9. Effective C++ 条款42
  10. 宝宝树小时光品牌升级:让宝宝从小爱上阅读
  11. IntelliJ IDEA 2017完全破解方法
  12. Maven的基本使用操作
  13. 人工智能入门——机器学习小案例(一)
  14. 数字证书及其认证过程
  15. 当下的力量实践手册读书笔记(1.30)
  16. 网络协议(一) TCP/IP 协议
  17. java获取异常信息
  18. NTFS和FAT32的区别和转换
  19. 探访广东电子垃圾第一镇:家庭作坊饮鸩止渴---ESM
  20. 战国李悝的“识人五法

热门文章

  1. 谷歌android p系统,一文尽览谷歌Android P预览版系统
  2. 易语言运行cmd命令move移动文件
  3. 在Ubuntu中安装eclipse图文详解
  4. 【配电网重构】基于matlab粒子群算法33节点配电网重构【含Matlab源码 1829期】
  5. DApp三道关 |链捕手
  6. python学习笔记 2 - 网络爬虫
  7. DIGITALWORLD.LOCAL-BRAVERY靶场
  8. Syntax Error: Error: Node Sass does not yet support your current environment: OS X Unsupported archi
  9. 埃及分数 ← IDA*
  10. 埃及分数怎么计算java_[蓝桥杯][java]埃及分数解法