如何在自定义相机中实现“捏合缩放”

2024-02-26

我有一个定制的照片/摄像机(想想 Snapchat),带有捏合识别器来放大/缩小。根据我在网上找到的一些代码,这是正确的情况:

  • 放大有点正常
  • 捕获图像捕获缩放图像

这是我需要帮助解决的问题:

  • 缩小导致崩溃
  • 虽然放大可以工作,但如果我放大,停止触摸屏幕,然后再次尝试放大,似乎会重置缩放。
  • 捕获视频重置缩放

这是我的捏合手势代码,应该更改什么?

for input in self.captureSession.inputs {
            // check that the input is a camera and not the audio
            if input.device == self.frontCameraDevice || input.device == self.backCameraDevice {

                if pinch.state == UIGestureRecognizerState.Changed {

                    let device: AVCaptureDevice = input.device
                    let vZoomFactor = pinch.scale
                    do{
                        try device.lockForConfiguration()
                        if vZoomFactor <= device.activeFormat.videoMaxZoomFactor {
                            device.videoZoomFactor = vZoomFactor
                            device.unlockForConfiguration()
                        }
                    }catch _{
                    }
                }

            }
        }

您必须根据以前的值设置 videoZoomFactor。

do {
    try device.lockForConfiguration()
    switch gesture.state {
    case .began:
        self.pivotPinchScale = device.videoZoomFactor
    case .changed:
        var factor = self.pivotPinchScale * gesture.scale
        factor = max(1, min(factor, device.activeFormat.videoMaxZoomFactor))
        device.videoZoomFactor = factor
    default:
        break
    }
    device.unlockForConfiguration()
} catch {
    // handle exception
}

您应该保存以前的比例因子,以便从当前缩放状态开始放大/缩小,上面示例中的 self.pivotPinchScale 是关键。 我希望你能从下面的例子中得到一些提示。

https://github.com/DragonCherry/CameraPreviewController https://github.com/DragonCherry/CameraPreviewController

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

如何在自定义相机中实现“捏合缩放” 的相关文章

  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • 检测 AVAudioPlayer 中的播放结束

    我有几个短的 mp3 声音 我将它们存储在数组中 并希望连续播放它们 有什么方法可以检测 AVAudioPlayer 何时停止播放 以便我可以调用完成处理程序并播放下一个声音 我知道有一个委托 但我正在使用 Playground 和 SKS
  • 在带有 Storyboard 的 XCode 4 中以模态方式推送视图时,出现“对开始/结束外观转换的不平衡调用”警告

    在网上进行了一些研究但没有成功后 我来这里向您询问有关我的警告的问题 实际上 我有一个带有导航控制器的视图 V1 我想在 V1 完成加载时推送模态视图 V2 所以我用performSegueWithIdentifier方法 我正在使用故事板
  • 如何解决 CoreData mogenerator 未找到问题

    我收到如下所示的错误 我不知道我错过了什么 我该如何解决这个问题 如下图所示 Users nischalhada Documents XcodePro mnepalnews revisited 2 0 CoreData mogenerato
  • 使用 Interface Builder 创建 UIScrollView 的步骤

    我正在尝试使用 UIScrollView 但似乎有一些基本的事情我不理解 假设我想在我的 iPhone 应用程序中使用 UIScrollView 我有一个充满按钮的视图 尺寸为 320x700 显然 这对于 320x480 的 iPhone
  • 错误:更改核心数据模型后架构armv7的重复符号

    我有一个使用核心数据框架的应用程序 我工作得很好 我刚刚更改了数据模型 向一个实体添加一个属性 当我尝试构建它时 出现错误 duplicate symbol OBJC METACLASS AccountFolder in Users XXX
  • 关于窗口层次结构的警告

    我的调试器中出现这样的警告 这是什么意思 Warning Attempt to present
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • 个人帐户开发者之间的 Apple 开发/分发证书

    我一直在到处寻找有关处理证书的正确答案 想象一下以下帐户 Joe拥有个人 Apple 帐户 但他根本不会编码 他只是发布了该应用程序并将其称为自己的 Bob还有一个个人 Apple 帐户 Bob 是一位编码专家 Joe 付费让他开发他的第一
  • SiriKit 错误:此应用程序不支持捐赠意图

    我在 Xcode 10 iOS 12 Beta 中捐赠自定义意图时遇到问题 我创建了一个在我的主应用程序目标和 OrderIntent 目标之间共享的自定义框架 我创建了一个 intentdefinition 文件 并将目标成员资格设置为我
  • 我怎样才能勾勒出文本字体?

    我想在边框 轮廓 中显示另一种颜色的文本 我正在尝试使用在 MapOverlayView 中显示文本 text drawAtPoint CGPointMake 0 30 withFont UIFont fontWithName Helvet
  • UICollectionView 拖放文件夹创建

    我正在使用 UICollectionView 创建 iOS 画廊应用程序 我希望用户能够拖放图像来重新排序图库并创建文件夹 类似于 iPhone 上的主屏幕 我发现了以下内容tutorial http nshint io blog 2015
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • 致命错误:在字典中发现“地理编码地标”类型的重复键。 (Mapbox 地理编码器)

    我引用 这通常意味着要么该类型违反了 Hashable 的要求 要么此类字典的成员在插入后发生了变化 我正在使用 Mapbox Geocoder 当发生此运行时错误时 我的 XCode 将我带到线程 1 0 swift runtime on
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • 在现有 iOS 应用程序中集成 React-native(0.40.0) 后找不到 Yoga/Yoga.h 头文件

    在我的 Swift iOS 应用程序中集成 React Native 后 我无法构建 yoga Yoga h file cannot be found 我已经浏览了文档 查看了react native github页面 检查了类似问题的SO
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged
  • 分发内部业务 IOS 应用程序

    我遇到了 IOS 应用程序分发的一个令人困惑的部分 因此 我需要简单细分一下我的限制 即仅将我的应用程序分发给我的员工 同事或任何被视为 内部 的人 这是表明我不希望该应用程序出现在应用程序商店中的另一种方式 我的情况是我为几家公司开发 他

随机推荐

  • jdk1.6内存布局

    我使用的是jdk1 6 我配置了 Xmx 2G Xms 2G 新尺寸 最大新尺寸 660m 我启用了详细GC 我看到了这一点 但我不明白 PSYoungGen total 608256K used 32440K eden space 540
  • 我应该有多少个 DBContext

    使用实体 我目前拥有 dbcontext 其中包含每个表 我想知道是否每个人都这样做 或者例如每个模块都有一个上下文 对我来说 dbcontext 是一种将模型映射到数据库的连接 并且由于只有一个数据库 所以我只需要一个 在我深入讨论之前
  • 防止登录请求泛滥的简单方法?

    如果我的网站使用 POST 表单进行登录 有什么快速 简单的方法可以防止恶意客户端向我的 Web 服务器发送大量 POST 请求 试图暴力破解我的用户帐户 PHP MySQL Apache 防止暴力破解比乍看起来要棘手 解决方案是组合控制
  • 对象、类、函数

    我想知道 JavaScript 对象 类和函数之间有什么区别 我认为类和函数是对象类型是正确的吗 类和函数的区别是什么 或者它们真的是同一件事 只是它们的术语根据它们的使用方式而变化 function func alert foo a fu
  • vscode 选择不寻常的自动完成选项

    在使用最新版本的 Visual Studio Code 时 我正在编辑 JavaScript 文件 并且经常希望将输出记录到控制台 我创建了一个用户片段 以便更容易自动完成 但我发现自动完成中获得的默认选项是下面红色突出显示的选项 而不是绿
  • 重载不明确(int -> int64_t 与 int -> double)

    为什么是隐式转换int to int64 t vs int to double模糊的 我本以为积分重载会优先于浮点积分 include
  • 无法将 X 用作 Y,因为该名称已在使用中,即使尚未使用

    我使用的是 PHP 5 4 并且具有类似于以下内容的 PSR 0 类结构 A Library Session php namespace A Library class Session 我的 应用程序 Session php namespa
  • Kendo UI 指令要求 jQuery 在 AngularJS 之前可用。请在文档中的 Angular 之前包含 jquery

    我有一个带有角度应用程序的 Mvc 有两个布局文件 登录布局 默认布局 主布局 单击 影片 按钮时 调用 影片控制器 和 影片动作 public ActionResult Movie return View 它使用 mainlayout 文
  • 如何编写具有默认值和选项的 tcl 程序?

    我正在尝试编写一个 tcl 程序 它执行以下操作 proc myProc arg1 def1 arg2 def2 tcl gt myProc arg1 val1 arg2 val2 arg1 variable has val1 arg2 v
  • Maven Buildnumber 插件 - Git

    Maven Buildnumber 插件似乎还不能与 GIT 一起使用 暂时有解决办法吗 我最近从 SVN 切换到 GIT 发现这是一个简单的过渡 但这是我目前唯一没有做的事情 Walter 我使用这个 Maven 插件 https git
  • 茉莉花角度单元测试'无法读取未定义的'属性'

    我刚刚开始学习角度单元测试 但是 对具有 http 调用的函数的此测试失败 我已经指出了问题 但我无法解决它 我知道这是一个简单的问题 控制器 Get data from URL vm getJson function var url ht
  • Process.Start,WorkingDirectory,从一个exe启动另一个

    我希望你能明白我的问题 不知道我是否能用英语正确描述它 但我会尝试 情况 文件夹结构 MainFolder Sub1 Sub2 2个exe文件 MainFolder MainProg exe和 Sub2 SecondProg exe Mai
  • 具有主备集群 POD 的 Kubernetes 服务

    很抱歉没有保持简短 因为任何此类尝试都会让我错过问题的一些重要细节 我有一个旧版 Java 应用程序 它在集群环境中以主动 备用模式工作 通过预定义端口公开某些 RESTful Web 服务 如果我的应用程序集群中有两个节点 则在任何时间点
  • ng-reflect-model 显示错误的值,但输入正确

    输入值为01020304050607080900010203040506 并且输入显示了正确的值 但是 当我检查ng reflect model时 该值是010203040506070809000102030405 ngModel 有长度限
  • 亚马逊 MWS ListOrders 从 Scratchpad 请求

    我正在尝试通过 MWS Scratchpad 获取订单列表 在便签本中一切正常 HTTP POST 是 POST Orders 2013 09 01 AWSAccessKeyId CHIAVE ACCESSO Action ListOrde
  • 如何在 Microsoft SQL Server 中仅使用日期查询 DATETIME 字段?

    我有一个表 TESTDATETIME字段 像这样 ID NAME DATE 1 TESTING 2014 03 19 20 05 20 000 我需要一个查询返回该行以及日期为 03 19 2014 的每一行 无论时间是什么 我尝试使用 s
  • 想要 Delphi5 虚拟 TreeView

    有人碰巧拥有与 Delphi5 兼容的 Virtual TreeView 的副本吗 或者有谁知道哪里可以下载吗 预先感谢您的任何回复 在虚拟树视图创建者的官方网站上 http www soft gems net http www soft
  • vscode 片段 - 多个正则表达式转换文件路径+文件名

    经过 1 周的搜索并尝试错误创建这个问题 希望有人愿意帮助我解决这个问题 我的 VsCode 片段应转换以下内容 D FolderX FolderY src Folder1 Folder2 Folder3 into FOLDER1 FOLD
  • 使用 Graphics.DrawImage 在 C# 中创建自定义选项卡

    我有一个项目 您可以在其中添加和删除选项卡 如网络浏览器 到目前为止我有这个 Button to add a new tab page private void cb addPage Click object sender EventArg
  • 如何在自定义相机中实现“捏合缩放”

    我有一个定制的照片 摄像机 想想 Snapchat 带有捏合识别器来放大 缩小 根据我在网上找到的一些代码 这是正确的情况 放大有点正常 捕获图像捕获缩放图像 这是我需要帮助解决的问题 缩小导致崩溃 虽然放大可以工作 但如果我放大 停止触摸