Question

J'essaie d'utiliser l'interface UIImagePickerController à partir du système d'exploitation 3.1, avec cameraOverlayView et takePicture, mais je n'ai clairement pas compris comment cela fonctionne. Par conséquent, je n'obtiens pas le comportement souhaité.

Ce que je veux faire, c'est ouvrir l'appareil photo et prendre une photo automatiquement sans que l'utilisateur ait à interagir avec le sélecteur ou à modifier l'image. Donc, je sous-classe UIImagePickerController (similaire à l'exemple dans http: / /github.com/pmark/Helpful-iPhone-Utilities/tree/master/BTL%20Utilities/ ) et désactivez tous les contrôles:

- (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];
}

Dans l'overlayView, j'ai réussi à forcer la méthode takePicture de UIImagePickerController à se déclencher (je le sais, car je peux le NSLog et j'entends le son de la caméra prenant une photo). OverlayView se présente très bien. Cependant, la méthode déléguée didFinishPickingMediaWithInfo: n'est jamais appelée et imagePickerControllerDidCancel n'est pas appelée non plus.

Alors, comment puis-je obtenir que les méthodes de délégation soient appelées, ou enregistrer l'image en remplaçant la méthode takePicture? (Je ne sais pas comment capturer les données de l'image ici, et Google semble m'avoir échoué). Je ne peux pas m'empêcher de penser que je n'ai pas compris comment fonctionne le courage de UIImagePickerController, mais la documentation n'est pas très utile:

exemple:

" Vous pouvez fournir une vue de superposition personnalisée pour afficher une interface de prise de vue personnalisée et lancer la prise de photos à partir de votre code. Votre vue de superposition personnalisée peut être affichée en plus ou à la place des contrôles par défaut fournis par l'interface du sélecteur d'images. "

ou de showCameraControls:

"Si vous définissez cette propriété sur NO et fournissez vos propres contrôles personnalisés, vous pouvez prendre plusieurs photos avant de fermer l'interface du sélecteur d'images." - Comment puis-je rejeter l'interface de sélection?

Remarque: le délégué est défini correctement dans IB. Ce n'est donc pas le problème.

Merci pour toute aide que vous pouvez fournir!

Était-ce utile?

La solution

J'ai constaté qu'il vous suffisait d'attendre "assez longtemps". avant d'appeler takePicture , ou cela échoue simplement en silence. Je ne sais pas trop comment déterminer la valeur minimale de " assez longtemps " cela fonctionnera toujours, mais si vous définissez une minuterie et attendez cinq ou dix secondes, tout devrait bien se passer. Ce serait bien si elle renvoyait une sorte de message "je ne suis pas prêt à prendre une photo pour l'instant, désolé". erreur soit directement à partir de takePicture ou par l'intermédiaire du délégué, mais pour autant que je sache, ce n'est pas le cas.

Autres conseils

Pour mettre à jour ma propre question: il s’avère que j’essayais d’utiliser TakePicture trop tôt. Lorsque j'ai déplacé l'action sur un bouton de la superposition et envoyé TakePicture à partir de ce bouton (une fois le sélecteur présenté en mode modal), les méthodes de délégation ont été déclenchées comme elles le devraient. Je ne sais pas si ce que je voulais est réalisable - je prends l'image sans appuyer sur ce bouton automatiquement - mais si c'est le cas, vous devrez probablement le faire en envoyant takePicture un peu après avoir essayé de l'utiliser.

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

imagePopover=[[UIPopoverController alloc]initWithContentViewController:imagePickerController];
[imagePopover presentPopoverFromRect:importButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top