В настоящее время я работаю над небольшим проектом, смысл проекта / приложения в том, что если вы встряхиваете устройство, вспышка загорается.Если вы снова встряхиваете, свет выключается!
Первые 3/4 переключения между включением или выключением света работают нормально, но после переключения 3/4 невозможно выключить свет, так как устройство не обнаруживаетвстряска.
Другая небольшая проблема (начиная с iOS 5.0) заключается в том, что при обнаружении движения вспышка будет мигать очень коротко (1 секунда) и затем включится.Это выглядит как короткая вспышка.
Что я делаю не так
Обнаружение сотрясения:
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.type == UIEventSubtypeMotionShake) {
NSLog(@"shaken, not stirred.");
[self playSound];
[self toggleFlashlight];
}
}
Переключение вспышки:
- (void)toggleFlashlight
{
AVCaptureDevice *device =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch] && [device hasFlash]){
if (device.torchMode == AVCaptureTorchModeOff) {
NSLog(@"It's currently off.. turning on now.");
AVCaptureDeviceInput *flashInput =
[AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
AVCaptureVideoDataOutput *output =
[[AVCaptureVideoDataOutput alloc] init];
AVCaptureSession *session =
[[AVCaptureSession alloc] init];
[session beginConfiguration];
[device lockForConfiguration:nil];
[device setTorchMode:AVCaptureTorchModeOn];
[device setFlashMode:AVCaptureFlashModeOn];
[session addInput:flashInput];
[session addOutput:output];
[device unlockForConfiguration];
[output release];
[session commitConfiguration];
[session startRunning];
[self setAVSession:session];
[session release];
}
else {
NSLog(@"It's currently on.. turning off now.");
[AVSession stopRunning];
}
}
}
Я был бы очень признателен за Ваш опыт в решении этой проблемы для меня!