2015-02-12 3 views
0

Я использую AVFoundation в iOS для управления факелом на iPhone 6. Мне нужно знать текущий уровень факела.torchLevel KVO - iOS

Я читал в AppleDevLib, что можно наблюдать текущий уровень факела с помощью KVO, но я не смог его реализовать.

Можете ли вы отложить образец, который обнаруживает изменение уровня факела, а затем изменяет переменную (например, этикетку на экране и т. Д.), Пожалуйста? Это мне очень поможет.

ответ

0

Мне понадобилось время, чтобы выяснить, как это сделать, но я считаю, что этот код 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; 
} 

Caveat: главная причина, я пытался использовать этот код, чтобы определить текущее состояние горелки который включается через центр управления, поэтому я могу оставить его включенным при использовании AVCaptureDevice, и факел отключается по какой-либо причине после начала захвата. Но независимо от того, что я пробовал (torchActive, torchMode, torchLevel), я не смог определить состояние. Этот код работает только после того, как он взял управление AVCaptureDevice и использует его как AVCaptureSession. Если кто-то знает, как получить текущее состояние фонарика или фонарика, который включен из центра управления, это то, что я пытаюсь сделать.

Смежные вопросы