ios - 启用 AR 相机时 iPhone X 手电筒关闭
问题描述
我正在构建一个需要打开手电筒模式的 AR 应用程序。打开手电筒模式,然后启用 AR 场景在我的 iPhone 8 上运行良好,但在 iPhone X 上,手电筒打开然后再次关闭。有没有办法解决这个问题,或者我必须做些什么才能让 iPhone X 工作?
- (void)turnTorchOn:(bool) on {
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
if (captureDeviceClass != nil) {
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch]){
[device lockForConfiguration:nil];
if (on) {
[device setTorchMode:AVCaptureTorchModeOn];
} else {
[device setTorchMode:AVCaptureTorchModeOff];
}
[device unlockForConfiguration];
}
}
}
然后后来:
self.arConfig = [ARWorldTrackingConfiguration new];
self.arConfig.planeDetection = ARPlaneDetectionHorizontal;
self.sceneView = [[ARSCNView alloc] initWithFrame:self.view.frame];
[self.view addSubview:self.sceneView];
SCNScene *scene = [SCNScene new];
self.sceneView.scene = scene;
self.sceneView.autoenablesDefaultLighting = YES;
self.sceneView.delegate = self;
self.sceneView.session.delegate = self;
更具体地说,这条线会关闭手电筒:
self.sceneView = [[ARSCNView alloc] initWithFrame:self.view.frame];
解决方案
我希望这段用 Swift 编写的逻辑稍有不同(由于guard
声明)的代码可能适用于您的 iPhone X,但老实说,我还没有尝试过。
func toggleTorch(on: Bool) {
guard let device = AVCaptureDevice.default(for: AVMediaType.video) else {
return
}
if device.hasTorch {
do {
try device.lockForConfiguration()
if on == true {
device.torchMode = .on
} else {
device.torchMode = .off
}
device.unlockForConfiguration()
} catch {
print("Error. Torch couldn't be used")
}
} else {
print("Torch isn't available")
}
}
// CALL IT:
// toggleTorch(on: true)
// toggleTorch(on: false)
希望这可以帮助。
推荐阅读
- python - 如何修复“AttributeError:'TypeError'对象在Python脚本中没有属性'code'?
- c# - 将状态传递给 Xamarin VisualStateManager 中的子视图
- asp.net-core - 使用或不使用 Akka.NET 的微服务开发
- python-3.x - 通过使用 ROC 指标的交叉验证来测量分类器
- typescript - 如何停止 rxjs 计时器
- sql-server - 使用 SQL 结果填充组合框并忽略额外的输出
- python - 使用隐式方法时 scipy.solve_ivp 中的奇怪行为
- c# - 过滤掉 API 结果
- c++ - incredibuild 不使用其他代理
- office-js - 当用户以内联模式回复/转发时如何关闭 UI