如何在iOS中使用Objective C扫描AVCaptureVideoPreviewLayer特定区域的条形码?

2023-12-20

我正在尝试使用 Objective C 中的 AVFoundation 在我的 iPhone 应用程序中实现条形码扫描仪。条形码扫描部分工作正常,但问题是当前预览显示在设备的整个屏幕上,我希望扫描仪预览显示在设备的特定区域,需要更改背景的亮度区域(请参考下面的屏幕截图)。

我怎样才能放置特定区域AVCaptureVideoPreviewLayer获得带角的条形扫描仪结果?


我的 pj 中有一个例子,它是用 Swift 编写的,但我想你可以很好地转换它,根据需要调整代码,55 是每一行的长度

为了创建角落,也许这样就可以了,scanRectView是利息矩形:

func createFrame() -> CAShapeLayer {
    let height: CGFloat = self.scanRectView.frame.size.height
    let width: CGFloat = self.scanRectView.frame.size.width
    let path = UIBezierPath()
    path.move(to: CGPoint(x: 5, y: 50))
    path.addLine(to: CGPoint(x: 5, y: 5))
    path.addLine(to: CGPoint(x: 50, y: 5))
    path.move(to: CGPoint(x: height - 55, y: 5))
    path.addLine(to: CGPoint(x: height - 5, y: 5))
    path.addLine(to: CGPoint(x: height - 5, y: 55))
    path.move(to: CGPoint(x: 5, y: width - 55))
    path.addLine(to: CGPoint(x: 5, y: width - 5))
    path.addLine(to: CGPoint(x: 55, y: width - 5))
    path.move(to: CGPoint(x: width - 55, y: height - 5))
    path.addLine(to: CGPoint(x: width - 5, y: height - 5))
    path.addLine(to: CGPoint(x: width - 5, y: height - 55))
    let shape = CAShapeLayer()
    shape.path = path.cgPath
    shape.strokeColor = UIColor.white.cgColor
    shape.lineWidth = 5
    shape.fillColor = UIColor.clear.cgColor
    return shape
}

目标C代码:

    CGFloat height = baseScannerView.frame.size.height+4;
    CGFloat width = baseScannerView.frame.size.width+4;

    UIBezierPath* path = [UIBezierPath bezierPath];

    [path moveToPoint:CGPointMake(1, 25)];
    [path addLineToPoint:CGPointMake(1, 1)];
    [path addLineToPoint:CGPointMake(25, 1)];

    [path moveToPoint:CGPointMake(width - 30, 1)];
    [path addLineToPoint:CGPointMake(width - 5, 1)];
    [path addLineToPoint:CGPointMake(width - 5, 25)];

    [path moveToPoint:CGPointMake(1, height - 30)];
    [path addLineToPoint:CGPointMake(1, height - 5)];
    [path addLineToPoint:CGPointMake(25, height - 5)];

    [path moveToPoint:CGPointMake(width - 30, height - 5)];
    [path addLineToPoint:CGPointMake(width - 5, height - 5)];
    [path addLineToPoint:CGPointMake(width - 5, height - 30)];

    CAShapeLayer *pathLayer = [CAShapeLayer layer];
    pathLayer.path = path.CGPath;
    pathLayer.strokeColor = [[UIColor redColor] CGColor];
    pathLayer.lineWidth = 5.0f;
    pathLayer.fillColor = nil;

    [self.scanRectView.layer addSublayer:pathLayer];

创建后,添加如下self.scanRectView.layer.addSublayer(self.createFrame()) in viewWillAppear or viewDidLayoutSubView

Result:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在iOS中使用Objective C扫描AVCaptureVideoPreviewLayer特定区域的条形码? 的相关文章

  • 是否有针对不同屏幕尺寸的单独故事板?

    基本上我已经完成了一个应用程序 我唯一的问题是 ATM 机应用程序在设计时只考虑了 4 英寸显示屏 当在 3 5 英寸模拟器上运行时 应用程序会丢失 0 5 英寸 显然 那么我的问题是 如何在 Xcode 5 中为不同的屏幕尺寸设置不同的故
  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • 本地化现有的 iOS 应用程序

    我不敢相信以前没有人问过这个问题 要么是我的编码实践太无组织性 要么是我没有使用正确的关键字 How can I localize an existing iOS app that does not use NSLocalizedStrin
  • 打乱 NSMutableArray 而不重复并显示在 UIButton 中

    在我看来 我有 12 个按钮 一个数组包含 6 个名称 我想在其中打印数组名称UIButton标题 这是我的代码 texts NSMutableArray alloc initWithObjects 1 2 3 4 5 6 nil UIBu
  • 如何替换已弃用的方法dispatch_get_current_queue()? [复制]

    这个问题在这里已经有答案了 我正在 iOS 5 中使用 xmppframework 开发一个聊天应用程序 它工作得很好 但我将 Xcode 更新到 4 5 1 将 iOS 5 更新到 iOS 6 将 Mac OS 更新到 10 7 5 但由
  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • 在横向中自动调整 UITableCells 内容的大小

    在 UITableView 中 我通过 UILabels 将内容添加到单元格中 定义最佳尺寸 与单元格宽度允许的一样大 我注意到只有tableView contentSize width是可靠的 因为cell contentView bou
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • GeoFire Swift 3 - 保存和更新坐标

    我正在尝试使用 GeoFire 将坐标存储到 Firebase 数据库中 我不确定如何更新新坐标 因为它们每秒都会更改 更新 随着childByAutoId 它正在为每辆自行车生成一个新的唯一 ID 如何引用这个唯一的自行车 ID 例如 用
  • 在 Xcode 5 中重命名 iOS 项目[重复]

    这个问题在这里已经有答案了 我需要重命名一个 iOS 项目 有没有办法在不开始一个全新项目的情况下做到这一点 我发现的所有其他信息都与 Xcode 4 或旧版本相关 这些方法似乎使项目崩溃 我在尝试任何名称更改之前创建了一个快照 在 Xco
  • UIButton的高亮状态由什么控制事件开始和结束

    我正在创建类似钢琴的视图UIButton作为钢琴键 什么UIControlEvents当按钮获得和失去突出显示状态时 我应该监听以获得回调吗 我试图创建子类UIButton并添加属性观察者highlighted并且运行良好 然而 有时我需要
  • 在 XCode 中链接静态 ObjC 库的过程

    我正在尝试链接到静态库 但不断收到链接器错误 我发现了一些发布示例的网站 但我无法看到我做错了什么 首先 我创建一个链接到我的库的项目 添加 gt 现有文件找到我的 xcodeproj 文件选择 将项目复制到目标组文件夹 选择我的宿主项目作
  • Firebase 身份验证问题 - 通过电子邮件地址检查用户是否存在

    我在 Firebase 上创建了一个帐户 它有效 但现在我想阻止人们使用已存在的电子邮件地址创建帐户 这是代码 DatabaseManager shared userExists with email completion weak sel
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • 在 Objective C 的类方法中引用类本身

    我希望我没有跳过 ObjC 手册中的这一部分 但是是否可以从类的一个类方法中引用该类 就像在 PHP 中一样 您将使用 this 来引用当前实例 而 self 引用实例的类 this 的 ObjC 等价物将是 self 那么 PHP 的 s
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • UIPanGestureRecognizer 对坐标的限制

    我在主 UIView 中添加了一个子视图 称为panel 并且我向其中添加了gestureRecognizer 因为我希望它只能在Y轴上拖动并且只能在某些限制下 即160 300 超过300它不能拖动 我以这种方式实现了手势处理 IBAct
  • insertNewObjectForEntityForName:

    我使用 Xcode xcdatamodel 文件编辑器设置了一个实体 我创建了一个名为 Person 的实体 添加了一些属性 然后生成了一个 m 文件来表示它 一切都很好 现在 当我去编写一行代码时 例如 Person person Per
  • 如何将 ios7 通用应用程序升级到基于 Xcode 6 的通用故事板应用程序?

    我目前有一个基于 xcode 5 ios 7 的通用应用程序 因此有两个故事板 我正在考虑将其更新到 ios 8 有没有办法 最佳方法将两个故事板迁移到通用的单个故事板 我在 xcode 6 中看不到转换选项 None
  • iOS - UITableViewCell 使文本加粗

    我有一个字符串 NSString userInfo James Johnson james 我想做的就是大胆James Johnson并保留 james正常字体 所以我尝试过的是使用NSAttributedString但为了完成这个过程 我

随机推荐

  • 在 Ember.js 中退出路由时如何*不*销毁 View

    关于新的 Ember js 路由系统 描述here http emberjs com guides outlets 如果我理解正确的话 当您退出路线时 视图会被破坏 有没有什么方法可以绕过退出路线时视图的破坏 以便在用户重新进入路线时保留视
  • 电子启动拖动目标操作系统路径

    我一直在研究 Electron 应用程序的文件系统拖放功能 我想要的是 我需要知道 如果我将一个 div 从电子应用程序拖到操作系统中 我只想知道目标操作系统路径 我对将文件操作复制到该路径不感兴趣 因为我有自定义逻辑 类似的解决方案 我了
  • 更改 docker 容器内的 /proc/sys/kernel/core_pattern 文件

    我该如何改变 proc sys kernel core patterndocker 容器内的文件没有特权模式 是否有任何标志要传递给docker daemon or docker run或任何相关的Dockerfile 内核不支持每容器模式
  • Onsubmit 事件被 onchange 默默杀死

    如果同时调用 Onsubmit 事件可以默默地终止 onchange 事件 我假设 js 引擎中存在竞争条件 在 chrome FF3 FF6 和 IE9 中进行了测试 要重现 您需要更改输入内容并单击提交按钮 在输入更改和提交按钮单击之间
  • 使用匿名函数时更新 DTM 预定义数据元素时出现问题

    如果我有一个名为 CS Test 的预定义数据元素 如下所示 return function var rvalue default custom script value from some data layer return rvalue
  • 使用 Doctrine2 存储动态字段

    在我们的应用程序中 我们希望使用doctrine2 但是 我们想要提供一项功能 但我完全不知道它是如何工作的 我们希望客户能够为我们的标准对象定义自定义字段 因此 这些字段将是即时生成的 而不是由条令已知和映射的对象定义的一部分 我们的第一
  • 即使请求超时后,spring MVC Callable 执行仍会继续吗?

    我有一个像这样的异步处理程序方法 RequestMapping custom timeout handling public ResponseBody WebAsyncTask
  • 监控 Mathematica 中并行计算的进度

    我正在建造一个大型ParallelTable 并希望对计算的进行情况保持一定的了解 对于非并行表 以下代码效果很好 counter 1 Timing Monitor Table counter n 10 6 ProgressIndicato
  • winRT拖放,交换两个项目而不是插入

    我是 WPF 的长期用户 但对 WinRT 还很陌生 我想知道是否有一种内置方法或简单方法可以将交换功能集成到容器中 以便交换交换容器中的两个项目 所需的行为是拖动一个项目并将其放在另一个项目上 并交换被拖动的项目和被拖动到的项目在容器中的
  • Vagrant 打包和重新打包的区别

    有什么区别vagrant box repackage docs https docs vagrantup com v2 cli box html and vagrant package docs https docs vagrantup c
  • torch.mean() 源代码的位置

    我正在尝试查找 torch mean 的源代码 但无法在 pytorch github 中找到它 It https pytorch org docs stable torch html torch mean正在数学运算下 但我根本找不到它
  • vb.net。如何将数据集绑定到DataRepeater?

    我正在寻找一个 vb net 示例 说明如何将数据集 数据表绑定到数据重复器并将数据元素绑定到数据集 数据表的列 谢谢 起初我以为你想要一个网络中继器 但从你的评论中我意识到你的意思是 Microsoft VisualBasic Power
  • 获取 Windows 句柄的 WNDPROC

    存在任何 Windows api 函数来检索WNDPROC用于 Windows 句柄 提前致谢 Use 获取窗口长指针 http msdn microsoft com en us library ms633585 aspx hwnd GWL
  • 同一进程的线程可以运行在不同的核心上吗?

    进程生成的线程可以在多核系统的不同核心上运行吗 假设我有一个进程 P 从中生成了两个线程 t1 和 t2 它是一个具有两个核心 C1 和 C2 的多核系统 我的问题是 t1 和 t2 是否可以与进程 P 运行在同一内存空间上 线程 t1 是
  • 选择时更改按钮文本颜色

    我有一个自定义按钮 当它突出显示时我正在设置不同的图像 现在 我想在按钮突出显示时更改按钮上文本的颜色 是否有可能做到这一点 你可以这样做 myButton setTitleColor UIColor greenColor forState
  • Windows Server 2012 R2 上的 TFS 2010 应用程序层配置失败

    我已在 Windows Server 2012R2 上安装了 Visual Studio 2010 的 TFS ISS 已配置了 IIS 6 兼容性 静态内容压缩和 Windows 身份验证 但应用层配置失败 出现以下错误 Error Ap
  • 在 if 语句的条件部分定义变量?

    我很震惊 这是允许的 if int x new int 20 std cout lt lt x lt lt n delete x else std cout lt lt x lt lt n delete x std cout lt lt x
  • C# 中“() =>”是什么意思?

    在复合应用指南中遇到以下行 我知道 gt 是一个 lambda 但什么是 mean 还有哪些其他例子 它叫什么名字 我可以搜索一下吗 this regionViewRegistry RegisterViewWithRegion Region
  • 替换文本文件中的第 n 行

    如何在 R 中替换文本文件的第 n 行 替换第三行 cat junk txt sic transit gloria mundi temeo danoas et dona ferentes Do this gt latin readLines
  • 如何在iOS中使用Objective C扫描AVCaptureVideoPreviewLayer特定区域的条形码?

    我正在尝试使用 Objective C 中的 AVFoundation 在我的 iPhone 应用程序中实现条形码扫描仪 条形码扫描部分工作正常 但问题是当前预览显示在设备的整个屏幕上 我希望扫描仪预览显示在设备的特定区域 需要更改背景的亮