¿Cómo encender / apagar la linterna usando un botón?

Puedo encender mi linterna con un botón y apagarlo con otro. Pero quiero hacerlo con un solo botón. Sin embargo, no tengo un marco que me permita usar el método bool isSelected. Así que no tengo ni idea de cómo combinar ambas funciones en un solo botón.

Aquí está el código que funciona:

-(void)onButtonPressed 
{

AVCaptureDevice *flashLight = [AVCaptureDevice 
defaultDeviceWithMediaType:AVMediaTypeVideo];
if([flashLight isTorchAvailable] && [flashLight
isTorchModeSupported:AVCaptureTorchModeOn])
{
    BOOL success = [flashLight lockForConfiguration:nil];
    if(success){
        [flashLight setTorchMode:AVCaptureTorchModeOn];
        [flashLight unlockForConfiguration];
    }
}

}

Uso esto para apagar la linterna.

-(void)offButtonPressed {

AVCaptureDevice *flashLight = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];
if([flashLight isTorchAvailable] && [flashLight
isTorchModeSupported:AVCaptureTorchModeOn])
{
    BOOL success = [flashLight lockForConfiguration:nil];
    if(success){
        [flashLight setTorchMode:AVCaptureTorchModeOff];
        [flashLight unlockForConfiguration];
    }
}


}

No soy particular sobre la forma en que se hace. Mientras la linterna se encienda con el primer toque y se apague en el segundo, no podría importarme menos el método.

Sin embargo, estoy usando barbuttonitems hechos programáticamente, así que por favor no me des métodos IBAction. También apreciaría que si el método sugerido es lo más simple posible, creo que la forma en que estoy usando la linterna en este momento es demasiado compleja.

Respuestas a la pregunta(5)

Su respuesta a la pregunta