Ios 触摸ID冻结AVCaptureDevice

Ios 触摸ID冻结AVCaptureDevice,ios,ios8,avcapturedevice,touch-id,Ios,Ios8,Avcapturedevice,Touch Id,我有一个AVCaptureDevice在屏幕上显示实时摄像头预览 当触摸ID视图覆盖在相机预览上时(使用CAContext的evaluatePolicy),相机预览将冻结。当取消触摸ID视图时,相机预览会在重新启动前闪烁黑屏 冻结和黑屏闪光灯都有问题。如何在覆盖Touch ID视图的情况下保持相机预览活动?我不确定这是否可行。当触摸ID警报出现在屏幕上时,应用程序似乎失去了控制。我知道当对话框打开时,我们的应用程序不会获得旋转事件,并且我知道当我使用Reveal.app检查视图层次结构时,我在层

我有一个
AVCaptureDevice
在屏幕上显示实时摄像头预览

当触摸ID视图覆盖在相机预览上时(使用
CAContext
evaluatePolicy
),相机预览将冻结。当取消触摸ID视图时,相机预览会在重新启动前闪烁黑屏


冻结和黑屏闪光灯都有问题。如何在覆盖Touch ID视图的情况下保持相机预览活动?

我不确定这是否可行。当触摸ID警报出现在屏幕上时,应用程序似乎失去了控制。我知道当对话框打开时,我们的应用程序不会获得旋转事件,并且我知道当我使用Reveal.app检查视图层次结构时,我在层次结构中看不到触摸ID视图


你能在背景模式下运行相机吗?这可能会奏效,但我认为不允许在背景中使用相机。

我同意保罗·塞尚的观点,我认为在TouchID过程处于活动状态时,您无法进行拍摄。虽然我在文档或头文件中都没有看到任何特定信息,但通过一些测试,您可以看到发生了什么

首先,TouchID提示符正在进程外运行。
1.在调试器中的设备上运行启用TouchID的应用程序
2.让应用程序显示TouchID提示符。
3.在Xcode中,暂停应用程序

通常,应用程序会在设备上冻结,但在这种情况下,您仍然可以使用指纹或“取消”按钮关闭对话框。一旦关闭TouchID提示符,应用程序将按预期暂停

在evaluatePolicy回调中设置断点。用指纹接受TouchID,您将看到该块正在从CoreAuthentication.daemon调用

-[ViewController startTouchID:]_block_invoke at .../testTouchIDThreadding/testTouchIDThreadding/ViewController.m:60
-[LAContext evaluatePolicy:options:reply:]_block_invoke () /*THIS IS MY BLOCK*/
...
-[NSXPCConnection _sendInvocation:withProxy:remoteInterface:withErrorHandler:timeout:userInfo:]_block_invoke310 ()
...
Enqueued from com.apple.NSXPCConnection.m-user.com.apple.CoreAuthentication.daemon (Thread 3)Queue : com.apple.NSXPCConnection.m-user.com.apple.CoreAuthentication.daemon (serial)
...
由于TouchID利用设备硬件读取指纹,并将其与存储在芯片上的指纹进行比较,我认为需要在流程执行时限制对任何其他设备硬件的访问

从你的经验和我刚刚拼凑的一个测试应用来看,这似乎是真的。我使用UIImagePickerController打开相机,打开时,我调用laContext evaluatePolicy:。。。它暂停了摄像机的拍摄

总之,当您使用TouchID验证时:
-您的进程仍然是活动的应用程序,但您已从进程中调用

-苹果在这段时间内限制对设备硬件的访问

我怀疑当触摸屏显示时,苹果真的接管了应用。我知道我的应用程序没有旋转方法,我也知道当你用一个视觉检查器(如Reveal.app)检查你的应用程序时,触摸ID屏幕甚至不是视图层次结构的一部分。希望这能有所帮助…哇,我没意识到像“揭示”应用程序这样的东西存在。看起来很有用。这是一个很棒的产品。它的大部分功能现在可以在Xcode中完成,但不能在设备上完成,如果你正在拍摄视频或使用触摸ID,你需要一个真正的设备。你所说的“失控”到底是什么意思?由于应用程序处于带有触摸ID的状态
ApplicationWillResignative
,并且通常在该状态下相机会继续运行(例如,如果用户双击home按钮)。好的,我已经尝试在后台模式下运行相机(使用
dispatch\u async
addOperationWithBlock
)。仍然冻结。我的意思是ApplicationIDResignative。到那里了吗?听起来像是这样,而且相机确实在这种状态下运行,除非触控ID打开。这对你来说太糟糕了。是的,这正是我所看到的。我想我会提交一个雷达错误,然后做出一些用户体验决策。你把一个略带透明的黑色UIView覆盖在相机上,这样黑屏就不那么明显了,怎么样?