J'ai un contrôleur de vue basé sur AVCam, et j'ai ajouté un UIButton pour basculer la lumière de la torche. Voici le code qui effectue cela:Comment savoir quand la torche AVCaptureDevice s'éteint?
- (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];
}
}
Vous remarquerez que je tourne le bouton jaune lorsque la lumière est allumée. Le problème est que la lumière de la torche s'éteint également lorsque l'application est envoyée en arrière-plan, lorsque le contrôleur de vue change, lorsqu'un contrôleur de vue d'alerte est présenté, etc. Ces événements éteignent la torche, mais je dois aussi noir encore. Au lieu d'activer le bouton noir pour chacun de ces scénarios, y a-t-il un moyen simple, comme recevoir une notification lorsque la lumière s'éteint? J'ai essayé AVCaptureDeviceWasDisconnectedNotification
, en remplaçant becomeFirstResponder
et viewDidDisappear
, aucun d'entre eux a travaillé.
Des suggestions?
Avez-vous essayé d'envoyer votre propre notification en utilisant les états AppDelegate? 'applicationWillResignActive' par exemple – Nathaniel
Vous pouvez utiliser KVO pour observer' torchActive'. –
@RhythmicFistman KVO a parfaitement fonctionné! Utilisé [this] (http://stackoverflow.com/questions/28489223/torchlevel-kvo-ios) comme guide –