iPhone X Flashlight turns off when AR Camera is enabled

孤人 提交于 2019-12-14 03:47:20

问题


I am building an AR app that needs the flashlight to be turned on torch mode. Turning on torch mode and then enabling the AR scene works fine on my iPhone 8, but on the iPhone X, it the flashlight turns on and then off again. Is there some way around this, or something specific I have to do for the iPhone X to work?

- (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];
        }
    }
}

And then later:

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;

More specifically, this line turns off the flashlight:

self.sceneView = [[ARSCNView alloc] initWithFrame:self.view.frame];

回答1:


I hope this code written in Swift with a slightly different logic (due to guard statement) may work for your iPhone X but, honestly saying, I haven't tried it yet.

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)

Hope this helps.



来源:https://stackoverflow.com/questions/50491228/iphone-x-flashlight-turns-off-when-ar-camera-is-enabled

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!