Frage

Ich versuche, die UIImagePickerController Schnittstelle von O 3.1, mit dem cameraOverlayView und Takepicture zu verwenden, aber ich habe versäumt, klar zu verstehen, wie das funktioniert, und so bin ich nicht immer das Verhalten ich will.

Was möchte ich tun, ist offen die Kamera automatisch ein Bild aufnehmen zu, ohne dass der Benutzer interagieren mit dem Picker mit oder das Bild bearbeiten. Also habe ich eine Unterklasse UIImagePickerController (ähnlich dem Beispiel in http: / /github.com/pmark/Helpful-iPhone-Utilities/tree/master/BTL%20Utilities/ ) und alle Steuerelemente deaktivieren:

- (void)displayModalWithController:(UIViewController*)controller animated:(BOOL)animated {
self.sourceType = UIImagePickerControllerSourceTypeCamera;
self.showsCameraControls = NO;
self.navigationBarHidden = YES;
self.toolbarHidden = YES;
    // Setting the overlay view up programmatically.
ipView = [[ImagePickerView alloc] init];
self.cameraOverlayView = ipView;
[controller presentModalViewController:self animated:NO];
}

In der Overlay habe ich es geschafft, die Takepicture Methode von UIImagePickerController zu zwingen, Feuer (das weiß ich, weil ich es NSLog kann, und ich höre den Klang der Kamera ein Bild aufnehmen). Die Overlay zeigt sich ganz gut. Doch die delegierte Methode didFinishPickingMediaWithInfo: nie wird genannt, und imagePickerControllerDidCancel nicht entweder aufgerufen.

Also, wie kann ich entweder bekommen die Delegatmethoden genannt werden, oder speichern Sie das Bild durch die Takepicture Methode überschrieben? (Ich habe keine Ahnung, wie hier die Bilddaten zu erfassen, und Google scheint mir gescheitert). Ich kann nicht helfen Gefühl, dass ich versagt habe zu verstehen, wie die Eingeweide von UIImagePickerController funktionieren, aber die Docs sind nicht übermäßig hilfreich:

z.

"Sie können eine Ansicht benutzerdefinierter Overlay bieten eine benutzerdefinierte Bildaufnahme-Schnittstelle angezeigt werden, und Sie können die Aufnahme von Bildern aus dem Code initiieren. Die benutzerdefinierte Overlay-Ansicht kann zusätzlich zu oder anstelle von dem Standard Steuerelemente angezeigt werden, vorausgesetzt, durch die Bild Picker-Schnittstelle. "

oder von showCameraControls:

„Wenn Sie diese Eigenschaft auf NO gesetzt und Ihre eigenen Kontrollen bieten, können Sie mehrere Bilder aufnehmen, bevor das Bild Picker Schnittstelle abgewiesen.“ - Wie kann ich entlassen die Picker-Schnittstelle

. Hinweis: der Delegierte richtig eingestellt ist in IB, das ist also nicht das Problem

Vielen Dank für jede Hilfe, die Sie anbieten können!

War es hilfreich?

Lösung

Ich habe festgestellt, dass Sie müssen nur warten „lange genug“, bevor takePicture Aufruf, oder es gerade nicht still. Ich habe keine gute Antwort, wie Sie den Minimalwert von „lange genug“, um zu bestimmen, die immer funktionieren, aber wenn Sie einen Timer einstellen und warten Sie fünf oder zehn Sekunden sollte in Ordnung sein. Es wäre schön, wenn es irgendeine Art von einem zurück „Ich bin nicht bereit, ein Foto machen noch, sorry“ Fehler entweder direkt von takePicture oder durch die Delegierten, aber soweit ich weiß, es funktioniert nicht.

Andere Tipps

Als Update auf meine eigene Frage: Es stellt sich heraus, dass ich versuchte, Takepicture zu verwenden zu früh. Als ich die Aktion auf einen Knopf auf dem Overlay bewegt und gesendet Takepicture von dieser Schaltfläche (sobald der Kommissionierer modal vorgestellt wurde), feuerte die Delegatmethoden wie sie sollten. Ich weiß nicht, ob das, was ich wollte erreichbar ist - das Bild zu nehmen, ohne dass die Taste drücken zu müssen, automatisch - aber wenn es ist, wird es wahrscheinlich durch das Senden Takepicture getan werden muß, um irgendwann, nachdem ich versuchte, es zu benutzen.

- (void) imageMethod: (id) sender { imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

imagePopover=[[UIPopoverController alloc]initWithContentViewController:imagePickerController];
[imagePopover presentPopoverFromRect:importButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top