У меня есть контроллер представления на основе AVCam, и я добавил UIButton для переключения света факела. Вот код, который выполняет это:
- (IBAction)toggleTorchLight:(id)sender {
// See: http://stackoverflow.com/questions/11726543/how-to-turn-flashlight-on-off-using-one-button
AVCaptureDevice *flashLight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([flashLight isTorchAvailable] && [flashLight isTorchModeSupported:AVCaptureTorchModeOn]){
if ([flashLight lockForConfiguration:nil]){
if ([flashLight isTorchActive]) {
[flashLight setTorchMode:AVCaptureTorchModeOff];
[(UIButton *)sender setTintColor:[UIColor blackColor]];
}
else {
[flashLight setTorchMode:AVCaptureTorchModeOn];
[(UIButton *)sender setTintColor:[UIColor yellowColor]];
}
[flashLight unlockForConfiguration];
}
}
Вы заметите, что я включаю желтую кнопку, когда горит свет. Проблема в том, что фонарик также выключается, когда приложение отправляется в фоновый режим, когда изменяется контроллер представления, когда представлен контроллер оповещения и т. д. Эти события выключают свет факела, но мне также нужно сделать кнопку опять черный.
Вместо того, чтобы делать кнопку черной для каждого из этих отдельных сценариев, есть ли простой способ, например, получение уведомления, когда свет выключается? Я пробовал AVCaptureDeviceWasDisconnectedNotification
, переопределяя becomeFirstResponder
и viewDidDisappear
, ни один из них не работал.
Какие-либо предложения?
applicationWillResignActive
например - person Nathaniel   schedule 22.11.2016torchActive
. - person Rhythmic Fistman   schedule 23.11.2016