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里实现这个方法:

    这样就大功告成了

  • 相关阅读:
    Mysql TEXT类型长度
    php中的||和or的区别 优先级
    常用的排序算法的时间复杂度和空间复杂度
    ThinkPHP 多应用多模块建立方式
    phpcms v9 后台添加修改页面空白页问题解决方法
    linux中nginx重定向方法总结
    Nginx的主要配置参数说明
    Apache多网站虚拟目录域名
    xampp命令
    (转载)处理SQL解析失败导致share pool 的争用
  • 原文地址:https://www.cnblogs.com/xuzb/p/7681531.html
Copyright © 2011-2022 走看看