2009-10-30 11 views
1

J'essaie d'utiliser l'interface UIImagePickerController à partir d'OS 3.1, avec cameraOverlayView et takePicture, mais j'ai clairement échoué à comprendre comment cela fonctionne, et donc je ne reçois pas le comportement que j'ai vouloir. Ce que je veux faire, c'est ouvrir l'appareil photo et prendre une photo automatiquement sans avoir à interagir avec le sélecteur ou modifier l'image. Donc, je sous-classe UIImagePickerController (similaire à l'exemple http://github.com/pmark/Helpful-iPhone-Utilities/tree/master/BTL%20Utilities/) et désactiver toutes les commandes:iPhone: prendre une photo par programmation

- (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 le overlayView, j'ai réussi à forcer la méthode takePicture de UIImagePickerController au feu (je sais, parce que Je peux le NSLog, et j'entends le bruit de l'appareil photo en prenant une photo). La superposition s'affiche très bien. Cependant, la méthode déléguée didFinishPickingMediaWithInfo: ne reçoit jamais d'appel, et imagePickerControllerDidCancel n'est pas appelée non plus.

Alors, comment puis-je obtenir les méthodes déléguées pour être appelé, ou enregistrer l'image en remplaçant la méthode takePicture? (Je n'ai aucune idée de comment capturer les données d'image ici, et Google semble m'avoir échoué). Je ne peux pas aider le sentiment que je n'ai pas réussi à comprendre comment le courage des travaux UIImagePickerController, mais les documents ne sont pas trop utiles:

par exemple:

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

ou de showCameraControls:

« Si vous définissez cette propriété sur NO et de fournir vos propres contrôles personnalisés, vous pouvez prendre plusieurs photos avant de rejeter l'interface de sélecteur d'image. » - Comment rejeter l'interface du sélecteur?

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!

Répondre

2

J'ai trouvé que vous avez juste à attendre "assez longtemps" avant d'appeler takePicture, ou il échoue silencieusement. Je n'ai pas une bonne réponse pour savoir comment déterminer la valeur minimale de "suffisamment longue" qui fonctionnera toujours, mais si vous réglez une minuterie et attendez cinq ou dix secondes, ça devrait aller. Ce serait bien si elle retournait une sorte de "Je ne suis pas encore prête à prendre une photo, désolé" erreur soit directement à partir de takePicture ou par le biais du délégué, mais pour autant que je sache pas.

0

Comme une mise à jour à ma propre question: Il s'est avéré que j'essayais d'utiliser takePicture trop tôt. Lorsque j'ai déplacé l'action vers un bouton sur la superposition et envoyé takePicture à partir de ce bouton (une fois que le sélecteur a été présenté de manière modale), les méthodes déléguées ont été déclenchées comme elles le devraient. Je ne sais pas si ce que je voulais est réalisable - prendre l'image sans avoir à appuyer sur ce bouton, automatiquement - mais si c'est le cas, cela devra probablement être fait en envoyant takePicture quelque temps après avoir essayé de l'utiliser.

0

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