今天我们接着聊聊iOS系统实现二维码扫描的其他注意点。

大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功能,即只有当二维码进入视图中心的方框中时才进行扫描识别功能,这样做的目的主要是为了提高用户的使用体验,需要用到这个类里面的一个属性:rectOfInterest,这个属性是一个CGRect结构体类型。但和我们平时经常使用的CGRect有点不一样。以下截取了官网文档对这个属性的表述:

/*!

@property rectOfInterest

@abstract Specifies a rectangle of interest for limiting the search area for visual metadata.

@discussion The value of this property is a CGRect that determines the receiver's rectangle of interest for each frame of video.

The rectangle's origin is top left and is relative to the coordinate space of the device providing the metadata.  Specifying

a rectOfInterest may improve detection performance for certain types of metadata. The default value of this property is the

value CGRectMake(0, 0, 1, 1).  Metadata objects whose bounds do not intersect with the rectOfInterest will not be returned.

*/

@property(nonatomic) CGRect rectOfInterest NS_AVAILABLE_IOS(7_0);

从以上属性和目前网络上的资源了解到,这个属性的作用大致是设置有效扫描的区域,具体到CGRectMake(x,y,width,height)中每一项的属性,可以这样来解释:

1.x和y表示我们将要设置的有效扫描区域左上角位置到我们已经设置的预览层的上边和左边的值,width和height则分别为有效扫描区域的高度和宽度。其实写到这儿,大家已经能够感觉到这个属性的特别了吧?就是将我们平时用的CGRect结构体的x和y交换位置,width和height交换位置。

2.但是,x,y,width,height的值均为0~1之间的任意值,也就是将原来的绝对值转换为所占区域的比例值。

按照这样的解释,在实际代码中去测试,发现完全不是这么回事,但经过反复的测试,终于发现了其中的秘密,这或许也就是Apple的设计和官网说明文档中存在的bug,误导了广大的开发者。

正确的理解应该是这样的:

记住两个点就可以完美的掌控这一切,1.有效扫描区域的左上角点(这跟iOS原点在左上角是一致的);2.预览层的原点位置却在右上角(不知道是不是Apple设计上的失误导致的,如果不是,只能说是奇葩设计了)。即需要更正上面的理解和目前网络上的大部分理解了,x值代表有效扫描区域左上角距离预览层顶部的距离,y值代码有效扫描区域左上角距离预览层右边的距离。

不知道各位是不是被Apple的这项涉及折腾惨了,反正我是被耍猴了!好了今天就跟大家聊着了,后续会继续更新其他内容,非常感谢!

转载请注明出处!尊重原创!

最新文章

  1. js压缩xml字符串,将xml字符串转换为xml对象,将xml对象转换为json对象
  2. Leetcode Edit Distance
  3. linux 几个控制流语句的格式例子(if语句)
  4. bzoj2286 消耗战
  5. OpenStack neutron删除网络设备出错解决办法
  6. Mac配置环境变量(Java,Android,Gradle,Maven,Hosts)
  7. 使用WDS安装Windows8.1
  8. HDOJ(HDU) 2137 circumgyrate the string(此题用Java-AC不过!坑)
  9. 理解Android的startservice和bindservice(转)
  10. FJ省队集训最终测试 T3
  11. Linux系统安装gcc/g++详细过程
  12. Latex:TexStudio的使用
  13. Docker Kubernetes Service 网络服务代理模式详解
  14. excel保存为制表符分隔的文本文件 js无法完整读取
  15. python 全栈开发,Day103(微信消息推送,结算中心业务流程)
  16. 【Alpha版本】冲刺阶段——Day2
  17. .NET MVC同页面显示从不同数据库(mssql、mysql)的数据
  18. 【学习笔记】AspectJ笔记
  19. SQL SERVER中的And与Or的优先级
  20. CF1009F Dominant Indices 解题报告

热门文章

  1. bootstrap 布局(收藏/摘抄)
  2. Qt - 错误总结 - 在自定义类头文件中添加Q_OBJECT 编译时报错(undefined reference to ‘vtable for xxThread)
  3. JS学习-创建对象
  4. filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=sSize , src=sURL )
  5. hdu 1281 二分图最大匹配
  6. Mac OS X 10.8.2终端切换root用户
  7. Docker - 创建Swarm
  8. iOS getter setter
  9. Yii2 时间控件之把layDate做成widget
  10. CentOS7 Tomcat 环境部署