Ich verwende den UIImagePickerController mit einer benutzerdefinierten Kamera-Overlay-Ansicht und möchte eine benutzerdefinierte Schaltfläche hinzufügen, um den Blitzmodus zwischen Automatisch, An und Aus umzuschalten. Hier ist die Methode, die Taste ruft:Ändern des Blitzmodus mit einem benutzerdefinierten Kamera-Overlay
- (void)didTapFlash:(id)sender
{
if (self.imagePickerController.cameraFlashMode == UIImagePickerControllerCameraFlashModeAuto)
{
[imagePickerController setCameraFlashMode:UIImagePickerControllerCameraFlashModeOn];
[self.flashButton setImage:[UIImage imageNamed:@"flashIconOn.png"] forState:UIControlStateNormal];
}
else if (self.imagePickerController.cameraFlashMode == UIImagePickerControllerCameraFlashModeOn)
{
self.imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;
[self.flashButton setImage:[UIImage imageNamed:@"flashIconOff.png"] forState:UIControlStateNormal];
}
else if (self.imagePickerController.cameraFlashMode == UIImagePickerControllerCameraFlashModeOff)
{
self.imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
[self.flashButton setImage:[UIImage imageNamed:@"flashIconAuto.png"] forState:UIControlStateNormal];
}
}
Das Problem ist, das nicht funktioniert. Der Wert von self.imagePickerController.cameraFlashMode ändert sich nie, sobald der Controller angezeigt wird. Der Flash-Wert kann geändert werden, bevor er angezeigt wird, aber sobald dies der Fall ist, wird immer der Wert 0 (Auto) zurückgegeben. Der seltsame Teil ist, auch wenn der Wert nicht ändert, wird der Blitz verhält, als ob es tut so, wenn ich den obigen Code zu ändern:
- (void)didTapFlash:(id)sender
{
if (flashButton.tag == 0)
{
[imagePickerController setCameraFlashMode:UIImagePickerControllerCameraFlashModeOn];
self.flashButton.tag = 1;
[self.flashButton setImage:[UIImage imageNamed:@"flashIconOn.png"] forState:UIControlStateNormal];
}
else if (flashButton.tag == 1)
{
self.imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;
self.flashButton.tag = -1;
[self.flashButton setImage:[UIImage imageNamed:@"flashIconOff.png"] forState:UIControlStateNormal];
}
else if (flashButton.tag == -1)
{
self.imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
self.flashButton.tag = 0;
[self.flashButton setImage:[UIImage imageNamed:@"flashIconAuto.png"] forState:UIControlStateNormal];
}
}
alles wie erwartet funktioniert. (der flashButton.tag speichert nur den Flash-Wert)
Weiß jemand, was hier passiert? Warum ist der Wert von cameraFlashMode immer 0 (sowohl in NSLog-Anweisungen als auch direkt beim Debugger), obwohl sich der Flash so verhält, als wäre er richtig eingestellt?
Ich habe auch dieses Problem. Hast du dieses Problem gelöst? – hmlasnk
Wenn Sie den Code aus dem zweiten Segment der Frage verwenden, funktioniert der Flash wie erwartet, aber der neue Wert wird nicht auf imagePickerController.cameraFlashMode aktualisiert, so dass der Wert an anderer Stelle gespeichert werden muss (im obigen Code habe ich ihn gespeichert Etikett). Ich weiß immer noch nicht den Grund dafür, warum es funktioniert. Ich nehme an, CameraFlashMode übergibt den neuen Wert nur an eine private Eigenschaft und wird zurückgesetzt. –
Ich denke, iOS 7.1 hat einen Bug. Das ist die Sache für dieses Problem. Ich habe vorher überprüft, es ist mit iOS 7.0 und hat perfekt funktioniert. Aber arbeite nicht mit iOS 7.1. – hmlasnk