FNScanner 模块是一个二维码/条形码扫描器,是 scanner 模块的优化升级版。在 iOS 平台上本模块底层集成了 Zbar 和系统自带的条形码/二维码分析库,由于 IOS 系统平台在 IOS7.0 以上才开放了二维码/条码的相关接口,所以在 IOS6 上运行时模块会调用开源库 Zbar 去读取解析二维码/条码。只有在 IOS7 以上版本才会调用系统自带扫码功能。

模块文档地址(点击即可跳转)

模块需要注意的地方:
1. 注意:使用本模块前,需在云编译页面勾选添加访问摄像头权限,若要访问相册也需勾选申请访问相册权限 。
2.  不能同时使用的模块:wwprint

本模块封装了两套扫码方案:
方案一
开发者通过调用 openScanner 接口直接打开自带默认 UI 效果的二维码/条形码扫描页面,本界面相当于打开一个 window 窗口,其界面内容不支持自定义。用户可在此界面实现功能如下:
打开关闭闪关灯
从系统相册选取二维码/条码图片进行解密操作
打开摄像头,自动对焦扫码想要解析的二维码/条码

方案二
通过 openView 接口打开一个自定义大小的扫描区域(本区域相当于打开一个 frame)进行扫描。开发者可自行 open 一个 frame 贴在模块上,从而实现自定义扫描界面的功能。然后配合使用 setFrame、closeView、switchLight 等接口实现开关闪光灯、重设扫描界面位置大小、图片解码、字符串编码等相关功能。详情请参考模块接口参数。

方案一我就不介绍,因为直接调取接口就能直接显示一个扫码ui界面,直接使用就可以,
楼主本帖分享的是方案一无法满足ui设计效果前提下,怎么实现ui自定义的效果;

方案二完成页面截图

方案二打开闪光灯效果界面截图

第一步:首先先打开openwin,然后再打开模块 ,然后延迟打开一个frm自定义一个扫码见面。大家上面看到扫码是这种思路的;

废话不多说上部分核心源码

`1.   var FNScanner, eHeader, headerH;

  1.     apiready = function() {
  2.         //应用全局FNScanner模块
  3.         FNScanner = api.require('FNScanner');
  4.         //定义根据id获取dom
  5.         eHeader = $api.byId('header');
  6.         //设置头部沉浸式
  7.         $api.fixStatusBar(eHeader);
  8.         //获取头部高度
  9.         headerH = $api.offset(eHeader).h;
  10.         //监听应用回到前台
  11.         api.addEventListener({
  12.             name: 'resume'
  13.         }, function(ret, err) {
  14.             FNScanner.onResume();
  15.         });
  16.         //监听应用回到后台
  17.         api.addEventListener({
  18.             name: 'pause'
  19.         }, function(ret, err) {
  20.             FNScanner.onPause();
  21.         });
  22.       
  23.         fnOpenFNScanner();
  24.     }
  25.     function fnOpenFNScanner() {
  26.         // 打开扫码模块
  27.         FNScanner.openView({
  28.             //autorotation: true,
  29.             fixedOn: api.frameName,
  30.             rect: {
  31.                 x: 0,
  32.                 y: headerH,
  33.                 w: api.frameWidth,
  34.                 h: api.frameHeight
  35.             }
  36.         }, function(ret, err) {
  37.             if (ret) {
  38.                 if (ret.eventType == 'success' && ret.content != '') {
  39.                     // 扫码成功执行函数操作传值
  40.                     fnOpenCouple(ret.content);
  41.                     return;
  42.                 }
  43.                 if (ret.eventType == 'cameraError') {
  44.                     api.toast({
  45.                         msg: '请开启app访问手机摄像头权限',
  46.                         duration: 2000,
  47.                         location: 'bottom'
  48.                     });
  49.                     setTimeout(function() {
  50.                         // 关闭扫码器  关闭扫码界面
  51.                         back();
  52.                     }, 300);
  53.                     return;
  54.                 }
  55.                 if (ret.eventType == 'albumError') {
  56.                     api.toast({
  57.                         msg: '请开启app访问手机相册权限',
  58.                         duration: 2000,
  59.                         location: 'bottom'
  60.                     });
  61.                     setTimeout(function() {
  62.                         back();
  63.                     }, 300);
  64.                     return;
  65.                 }
  66.                 if (ret.eventType == 'fail') {
  67.                     api.toast({
  68.                         msg: '扫码失败,请从新扫码',
  69.                         duration: 2000,
  70.                         location: 'bottom'
  71.                     });
  72.                     setTimeout(function() {
  73.                         back();
  74.                     }, 300);
  75.                     return;
  76.                 }
  77.             } else {
  78.                 api.toast({
  79.                     msg: '扫码错误请稍后再试',
  80.                     duration: 2000,
  81.                     location: 'bottom'
  82.                 });
  83.                 setTimeout(function() {
  84.                     back();
  85.                 }, 300);
  86.             }
  87.         });
  88.         setTimeout(function() {
  89.             // 打开扫码动画frm页面
  90.             api.openFrame({
  91.                 name: 'add_frm',
  92.                 url: './add_frm.html',
  93.                 rect: {
  94.                     marginTop: headerH,
  95.                     marginLeft: 0,
  96.                     marginRight: 0,
  97.                     marginBottom: 0
  98.                 },
  99.                 bgColor: 'rgba(0,0,0,0)',
  100.             });
  101.         }, 300);
  102.     }
  103.     //返回
  104.     function back() {
  105.         // 关闭win页面
  106.         api.closeWin();
  107.         // 关闭扫码模块
  108.         FNScanner.closeView();
  109.     }
  110.     //打开最后扫码得出的数值
  111.     function fnOpenCouple(content) {
  112.         console.warn(content);
  113.         back(); //建议打开下一页我这块只是为了方便直接调用返回按钮   扫码成功之后必须关闭扫码模块  不然会出现多次扫码情况
  114.     }
  115.     var isSOff = true;
  116.     // 打开闪光灯
  117.     function fnOpenLamp() {
  118.         if (isSOff) {
  119.             FNScanner.switchLight({
  120.                 status: 'on'
  121.             });
  122.             isSOff = false;
  123.         } else {
  124.             FNScanner.switchLight({
  125.                 status: 'off'
  126.             });
  127.             isSOff = true;
  128.         }
  129.     }

_复制代码_`


YonBuilder
17 声望9 粉丝

用友YonBuilder移动低代码开发平台,快速构建高性能多端应用