首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS: iPhone 11 Pro上的火炬级

iOS: iPhone 11 Pro上的火炬级
EN

Stack Overflow用户
提问于 2020-02-12 21:21:43
回答 3查看 858关注 0票数 10

我使用AVCaptureDevice.setTorchModeOn(level)方法在可变亮度的情况下打开手电筒。

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

但是在iPhone 11专业版上,手电筒只在级别为1.0时才打开!如果与控制中心的手电筒相比,它的亮度远远低于最高水平。

我尝试使用maxAvailableTorchLevel常量,但结果与使用1.0相同。

还尝试了比1.0更多的值--这会导致异常(正如预期的那样)。

有人也有这个问题吗?也许有什么解决办法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-20 17:45:52

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

这是我测试过的解决办法。我在这里使用的是目标C,而不是Swift,因为这是2009年我在这个旧应用程序中使用的!您可以很容易地找到Swift代码来启动视频捕获(忽略输出,它应该工作相同。

代码语言:javascript
复制
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:

代码语言:javascript
复制
NSError *error = nil;

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

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

票数 1
EN

Stack Overflow用户

发布于 2020-09-02 22:07:44

我刚刚检查了AVCaptureDevice.setTorchModeOn(level)上的iPhone 11 Pro在iOS 14测试版6,它是闪闪发光的!

似乎有超过4个亮度水平,你可以看到在控制中心,最高水平是真正明亮的。

只有两个LED顶部工作(与控制中心的手电筒相同)。

票数 1
EN

Stack Overflow用户

发布于 2020-03-10 08:58:50

根据maxAvailableTorchLevel的文档

此常量始终表示最大可用火炬级别,与设备当前支持的实际最大值无关。

如果这个常数总是表示最大可用火炬级别,我们不仅提取不同设备的最大可用级别不同,而且您提到的设备不能超过1.0。

现在最好的办法就是向苹果的开发者支持伸出援手。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60197045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档