Фонарик iPhone X выключается при включении AR Camera - PullRequest
0 голосов
/ 23 мая 2018

Я создаю приложение 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];

1 Ответ

0 голосов
/ 25 марта 2019

Я надеюсь, что этот код, написанный на 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)

Надеюсь, это поможет.

...