我使用AVCaptureDevice.setTorchModeOn(level)方法在可变亮度的情况下打开手电筒。
在我的旧iPhone SE上,它工作得很好--当我将level从0更改为1时,我可以清楚地看到4个不同的亮度级别。
但是在iPhone 11专业版上,手电筒只在级别为1.0时才打开!如果与控制中心的手电筒相比,它的亮度远远低于最高水平。
我尝试使用maxAvailableTorchLevel常量,但结果与使用1.0相同。
还尝试了比1.0更多的值--这会导致异常(正如预期的那样)。
有人也有这个问题吗?也许有什么解决办法?
发布于 2020-05-20 17:45:52
我记得,在iOS 3.x的日子里,我们没有简单的LED API。我们必须开始一个完整的视频拍摄环节。事实证明,使用iPhone 11,这似乎是唯一的解决方案。我很想听听其他不需要这个的人。
这是我测试过的解决办法。我在这里使用的是目标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上获得最大亮度。我现在正在寻找相同的解决方案,而不必使用视频捕获(这显然是使用电池,并需要一个用户可能不喜欢的许可。这需要很好地解释)。
发布于 2020-09-02 22:07:44
我刚刚检查了AVCaptureDevice.setTorchModeOn(level)上的iPhone 11 Pro在iOS 14测试版6,它是闪闪发光的!
似乎有超过4个亮度水平,你可以看到在控制中心,最高水平是真正明亮的。
只有两个LED顶部工作(与控制中心的手电筒相同)。
发布于 2020-03-10 08:58:50
此常量始终表示最大可用火炬级别,与设备当前支持的实际最大值无关。
如果这个常数总是表示最大可用火炬级别,我们不仅提取不同设备的最大可用级别不同,而且您提到的设备不能超过1.0。
现在最好的办法就是向苹果的开发者支持伸出援手。
https://stackoverflow.com/questions/60197045
复制相似问题