zoukankan      html  css  js  c++  java
  • UIImagePickerController获取照片的实现,添加overlay方法 (相机取景框)

    DEVELOPER.XIAOYAOLI

    技术笔记

    简单的利用UIImagePickerController调用iPhone摄像头获取照片的方法,同时介绍了怎么添加overlay,用于自定义预览界面

    IMG_1056 IMG_1057

    UIImagePickerController是一种获取摄像头照片取景器的方法,简单的实现方法如下,我加了主要的注释,注意添加

    <UIImagePickerControllerDelegate,UINavigationControllerDelegate>这两个代理

    这个代码就可以实现拍照功能了,如果把注释掉的代码加上就可以添加overlayview,比如十字准星,条形码扫描框之类的

    那么,如何处理获得的图像呢?利用下面的这个代理方法

    – (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    
    {
    
    UIImage *image= [info objectForKey:@”UIImagePickerControllerOriginalImage”];//可以打印一下这个info,如果用的是可编辑的,那就获取editedImage,不是OriginalImage
    
     
    
    NSData *data = UIImageJPEGRepresentation(image, 1);//转换成JPEG编码
    
    UIImage *finalImg = [[UIImage imageWithData:data] fixOrientation];
    
    [self saveImage:finalImg WithName:@”salesImageBig.jpg”];
    
    [self dismissModalViewControllerAnimated:YES];
    
     
    
    }
    

    大致这些就可以实现拍照获取照片功能了。

     关于OVERLAY的补充

    这里要补充一点,overlay的添加原理虽然很简单,但是实际应用的时候会遇到一些问题,先说从摄像头取照片儿时的情况

    这个时候没有状态栏,经过测试(没找到文档),Edit状态的裁剪窗口是320*320的,Y是75所以我可以精确的把overlay匹配位置

    如果是album获取的,是不可以在创建UIImagePicker的时候设置overlay的,因为cameraOverlayView顾名思义就是为摄像头准备的,所以要通过UINavigationController的代理方法判断层级后在当前层级添加overlay

    此外这里就不是75了,是95,因为album取景是有状态栏的,就像文章最开始的图片

    实现方法:

    至于为什么是3,试一试就知道了,这一层是navigation推入的第三级视图

    这样看似大功告成了,但事实上会发现在edit模式里这个overLayerView阻挡了移动和拖拽的手势,想当然的设定userInterface也没用,所以需要在自定义的overLayView里实现这个方法:

    这样就大功告成了

  • 相关阅读:
    centos7安装Python3.7,执行./configure时报错,configure: error: no acceptable C compiler found in $PATH
    Hadoop集群搭建
    jdk安装
    ssh免密登陆
    centos安装python3.7
    centos7更改yum源
    32.Java基础_异常
    31.Java基础_日期/日期格式/日历类
    1.华为路由交换技术_网络基础知识
    396. 旋转函数(数学)
  • 原文地址:https://www.cnblogs.com/xuzb/p/7681531.html
Copyright © 2011-2022 走看看