现在苹果iOS系统已经原生支持了二维码扫描的功能,使用原生来扫描需要导入AVFoundation。

扫描准备
一、获取摄像设备:
device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
二、创建输入流
do {
try input = AVCaptureDeviceInput(device: device)
} catch let e as NSError {
print(e.localizedDescription)
}
三、创建输出流
output = AVCaptureMetadataOutput() // 设置代理在主线程中刷新 output?.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
四、初始化连接对象
session = AVCaptureSession() // 高质量采集率 session?.canSetSessionPreset(AVCaptureSessionPresetHigh) session?.addOutput(output) session?.addInput(input)
五、设置扫描区域
// 特别注意的地方:有效的扫描区域,定位是以设置的右顶点为原点。屏幕宽所在的那条线为y轴,屏幕高所在的线为x轴 let x = ((SCREENHeight - QRCodeWidth - topViewHeight) / 2.0) / SCREENHeight let y = ((SCREENWidth - QRCodeWidth) / 2.0) / SCREENWidth let width = QRCodeWidth / SCREENHeight let height = QRCodeWidth / SCREENWidth output?.rectOfInterest = CGRect(x: x, y: y, width: width, height: height)
六、设置扫码支持的编码格式(如下设置条形码和二维码兼容)
output?.metadataObjectTypes = [AVMetadataObjectTypeQRCode, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code]
七、开始捕获
preview = AVCaptureVideoPreviewLayer(session: session) preview?.videoGravity = AVLayerVideoGravityResizeAspectFill preview?.frame = self.view.layer.bounds self.view.layer.insertSublayer(preview!, at: 0) session?.startRunning()
扫描动画
这里的动画是仿支付宝的扫描框动画
我们新建一个方法,专门处理我们的动画。
fileprivate func scanAnimation() -> CABasicAnimation {
let scanNetAnimation = CABasicAnimation()
// 沿Y轴运动
scanNetAnimation.keyPath = "transform.translation.y"
// 扫描框的高度,注意:这里是实际高度的相反数
scanNetAnimation.byValue = QRCodeWidth
// 动画的持续时间
scanNetAnimation.duration = 1.5
// 动画的重复次数
scanNetAnimation.repeatCount = MAXFLOAT
return scanNetAnimation
}
使用动画:
我们在创建界面的时候,扫描框有一个UIImageView,我们需要将我们的动画添加到这个ImageView上面。
scanImageView?.layer.add(scanAnimation(), forKey: nil)
扫描之后的处理
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
if metadataObjects.count > 0 {
session?.stopRunning()
let metadataObject = metadataObjects[0] as AnyObject
let stringValue: String = metadataObject.stringValue
let vc = QRCodeResultViewController.instantiate()
vc.resultStr = stringValue
self.navigationController?.pushViewController(vc, animated: true)
}
}
点击扫描结果的处理
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
let requestURL = request.url
if requestURL?.scheme == "http" || requestURL?.scheme == "https" || requestURL?.scheme == "mailto" && navigationType == .linkClicked {
// UIApplication.shared.open(requestURL!, options: [:], completionHandler: nil)
let svc = SFSafariViewController(url: requestURL!)
self.present(svc, animated: true, completion: nil)
}
return true
}
我们可以用
open func open(_ url: URL, options: [String : Any] = [:], completionHandler completion: ((Bool) -> Swift.Void)? = nil)
在Safari中打开连接。不过最好是把事件控制在自己的程序中,在iOS 9 之后,苹果引入了 SFSafariViewController 这个类,可以用这个类来显示需要浏览的网页。
let svc = SFSafariViewController(url: requestURL!) self.present(svc, animated: true, completion: nil)
以上所述是小编给大家介绍的iOS 原生实现扫描二维码和条形码功能限制扫描区域,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# ios原生条形码扫描
# ios原生二维码扫描
# iOS和Android用同一个二维码实现跳转下载链接的方法
# IOS生成与读取二维码名片
# iOS实现二维码的扫描功能
# ios swift3.0实现二维码扫描、生成、识别示例代码
# IOS笔记061之二维码的生成和扫描
# iOS模仿微信长按识别二维码的多种方式
# iOS 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑
# iOS自带原生二维码扫描的实现
# iOS第三方框架二维码生成与扫描
# 可以用
# 小编
# 自己的
# 在此
# 给大家
# 高质量
# 那条
# 所述
# 支付宝
# 给我留言
# 感谢大家
# 新建一个
# 持续时间
# 有一个
# 疑问请
# 有任何
# 点为
# 引入了
# height
# metadataObjectTypes
相关文章:
如何用PHP工具快速搭建高效网站?
制作销售网站教学视频,销售网站有哪些?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
c# 服务器GC和工作站GC的区别和设置
如何使用Golang安装API文档生成工具_快速生成接口文档
如何获取上海专业网站定制建站电话?
html制作网站的步骤有哪些,iapp如何添加网页?
如何在景安服务器上快速搭建个人网站?
建站之星2.7模板快速切换与批量管理功能操作指南
建站为何优先选择香港服务器?
javascript中对象的定义、使用以及对象和原型链操作小结
高防服务器如何保障网站安全无虞?
建站主机选购指南与交易推荐:核心配置解析
如何在香港免费服务器上快速搭建网站?
建站主机类型有哪些?如何正确选型
沈阳制作网站公司排名,沈阳装饰协会官方网站?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站主机选购指南:核心配置与性价比推荐解析
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
建站上传速度慢?如何优化加速网站加载效率?
建站主机服务器选购指南:轻量应用与VPS配置解析
宝塔建站助手安装配置与建站模板使用全流程解析
宝塔新建站点为何无法访问?如何排查?
魔方云NAT建站如何实现端口转发?
,购物网站怎么盈利呢?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何快速选择适合个人网站的云服务器配置?
如何快速查询网站的真实建站时间?
建站之星后台管理:高效配置与模板优化提升用户体验
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
如何在自有机房高效搭建专业网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
深入理解Android中的xmlns:tools属性
高性能网站服务器部署指南:稳定运行与安全配置优化方案
无锡营销型网站制作公司,无锡网选车牌流程?
公司门户网站制作流程,华为官网怎么做?
建站之星ASP如何实现CMS高效搭建与安全管理?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
建站之星安装模板失败:服务器环境不兼容?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
实例解析angularjs的filter过滤器
建站之星如何实现PC+手机+微信网站五合一建站?
中山网站推广排名,中山信息港登录入口?
再谈Python中的字符串与字符编码(推荐)
制作门户网站的参考文献在哪,小说网站怎么建立?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。