iOS:iPhone 11 Pro 上的手电筒级别

iOS: Torch level on iPhone 11 Pro

我正在使用 AVCaptureDevice.setTorchModeOn(level) 方法以可变亮度打开手电筒。

在我的旧 iPhone SE 上,它工作正常 — 当我将 level0 更改为 1 时,我可以清楚地看到 4 个不同的亮度级别。

但是在iPhone 11 Pro上手电筒只有在1.0级别时才会打开!它的亮度与最大级别 相差 (与控制中心的手电筒相比)。

我尝试使用 maxAvailableTorchLevel 常量,但结果与使用 1.0 相同。
还尝试了超过 1.0 的值——这会导致异常(如预期的那样)。

有没有人也遇到过这个问题?也许有一些解决方法?

根据 maxAvailableTorchLevel

的文档

This constant always represents the maximum available torch level, independent of the actual maximum value currently supported by the device.

如果这个常量始终表示最大可用手电筒级别,我们不仅可以提取不同设备具有不同的最大可用级别,而且您提到的设备不能高于 1.0。

现在最好的办法就是联系 Apple's developer support

我记得在 iOS 3.x 的日子里,我们还没有简单的 LED API。我们必须开始一个完整的视频捕获会话。事实证明,使用 iPhone 11 这似乎是唯一的解决方案。我很想听听其他人不需要这个。

这是我经过测试的解决方法。我在这里使用 Objective C,而不是 Swift,因为那是我从 2009 年开始在这个旧应用程序中使用的!您可以轻松找到 Swift 代码来开始视频捕获(并忽略输出,它应该工作相同。

AVCaptureSession* session = [[AVCaptureSession alloc] init];

AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:&error];
if ([session canAddInput:deviceInput]) {
    [session addInput:deviceInput];
}

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

CALayer *rootLayer = self.view.layer;
[rootLayer setMasksToBounds:YES];

CGRect frame = self.view.frame;
[previewLayer setFrame:frame];
[rootLayer insertSublayer:previewLayer atIndex:0];

//This is where you'd save the video with AVCaptureVideoDataOutput but of course we don't.

[session startRunning];

然后像往常一样启动 LED:

NSError *error = nil;

if ([inputDevice isTorchModeSupported:AVCaptureTorchModeOn])
[inputDevice setTorchModeOnWithLevel:1.0 error:&error];

这在我的 iPhone 11 Pro 上获得了最大亮度。我现在正在寻找无需使用视频捕获的相同解决方案(这显然使用电池并且需要许可,用户可能不喜欢。需要很好地解释)。

我刚刚在 iPhone 11 Pro 和 iOS 14 beta 6 上检查了 AVCaptureDevice.setTorchModeOn(level),它闪闪发光!
Control Center里面好像有4个以上的亮度等级,最高那个等级真的很亮
只有顶部的两个 LED 灯在工作(与控制中心的手电筒相同)。