iphone - prender - linterna online
Atenuar el LED de la aplicación linterna iPhone 5 en xCode (3)
Estoy buscando atenuar el LED de la linterna con una opción de control deslizante. Sé que Apple admite esto para iOS 6, sin embargo, no estoy seguro de qué código usar. Aquí está el código que tengo actualmente en el archivo .m.
-(IBAction)torchOn:(id)sender;
{
onButton.hidden = YES;
offButton.hidden = NO;
onView.hidden = NO;
offView.hidden = YES;
AVCaptureDevice *flashLight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if([flashLight isTorchAvailable] && [flashLight isTorchModeSupported:AVCaptureTorchModeOn])
{
BOOL success = [flashLight lockForConfiguration:nil];
if(success)
{
[flashLight setTorchMode:AVCaptureTorchModeOn];
[flashLight unlockForConfiguration];
}
}
}
-(IBAction)torchOff:(id)sender;
{
onButton.hidden = NO;
offButton.hidden = YES;
onView.hidden = YES;
offView.hidden = NO;
AVCaptureDevice *flashLight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if([flashLight isTorchAvailable] && [flashLight isTorchModeSupported:AVCaptureTorchModeOn])
{
BOOL success = [flashLight lockForConfiguration:nil];
if(success)
{
[flashLight setTorchMode:AVCaptureTorchModeOff];
[flashLight unlockForConfiguration];
}
}
}
¿Alguna sugerencia?
- (BOOL)setTorchModeOnWithLevel:(float)torchLevel error:(NSError **)outError
Hace lo que quieres Sin embargo, por lo que puedo ver, solo se actualiza en ciertos intervalos (~ 0.2).
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[device lockForConfiguration:nil];
[device setTorchModeOnWithLevel:slider.value error:NULL];
[device unlockForConfiguration];
Editar - Ejemplo completo:
Aquí hay un UISlider. Necesita agregar una salida de IBAction a su control deslizante o agregar un objetivo mediante programación (como yo):
UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(20.0f, 20.0f, 280.0f, 40.0f)];
slider.maximumValue = 1.0f;
slider.minimumValue = 0.0f;
[slider setContinuous:YES];
[slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:slider];
Luego, en respuesta al cambio del control deslizante:
- (void)sliderDidChange:(UISlider *)slider
{
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[device lockForConfiguration:nil];
[device setTorchModeOnWithLevel:slider.value error:NULL];
[device unlockForConfiguration];
}
AVCaptureDevice setTorchModeOnWithLevel: error: la función solo se admite con dispositivos ios 6.0+. http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html
¿Qué pasa con los dispositivos con iOS 5? ¿Qué puedo hacer para una funcionalidad similar en iOS 5?
Si hay dos controles deslizantes es porque el control deslizante se establece en el m. archivo tiene que eliminar [self.view addSubview:slider];
parte del código.