手电筒级 KVO - w=10=sh

torchLevel KVO - iOS

我在 iOS 中使用 AVFoundation 来操纵 iPhone 6 上的手电筒。我需要知道当前的手电筒级别。

我在 AppleDevLib 中读到可以使用 KVO 观察当前的火炬水平,但我没有实现它。

你能写下一些检测手电筒水平变化然后改变变量(如屏幕上的标签等)的样本吗?这将对我有很大帮助。

我花了一段时间才弄清楚如何做到这一点,但我相信这个 KVO 代码对你有用。我还没有彻底测试这段代码,但我确实让它基本上可以在一个应用程序中工作:

static void * const torchLevelObservationContext = (void*)&torchLevelObservationContext;

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if (context == torchLevelObservationContext) {
        AVCaptureDevice *thisDevice = (AVCaptureDevice*)object;
        NSLog( @"Current torch level: %f", thisDevice.torchLevel);
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

-(id) init {
    if (self = [super init]) {
        AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

        [videoDevice addObserver:self forKeyPath:@"torchLevel" options:NSKeyValueObservingOptionNew context:torchLevelObservationContext];

        // whatever other initialization code ...
    }
    return self;
}

警告:我尝试使用此代码的主要原因是确定通过控制中心打开的手电筒的当前状态,以便我可以将其保持打开状态使用 AVCaptureDevice 时,一旦捕获开始,手电筒由于某种原因关闭。但无论我尝试什么(torchActive、torchMode、torchLevel),我都无法确定状态。这段代码似乎只有在它控制了 AVCaptureDevice 并将其用作 AVCaptureSession 之后才起作用。如果有人知道如何从控制中心获取打开的手电筒或手电筒的当前状态,那就是我正在尝试做的。