2009-11-18 4 views
3

J'ai beaucoup travaillé ces derniers mois avec UIImagePickerController, en particulier avec les nouvelles fonctionnalités de OS3.1 et plus récentes pour superposer des vues au-dessus de la vue de la caméra. Cela a fonctionné très bien.Affichage de UIImagePickerController dans un autre UIView

Cependant, je travaille actuellement sur un projet où j'aimerais pouvoir afficher la vue caméra du UIImagePickerController dans une vue existante. Essentiellement, le contraire de ce que je fais actuellement. Un exemple serait un contrôleur de vue avec des composants de navigation (Pensez barres horizontales supérieures et inférieures avec des gradients), et en appuyant sur un bouton sur l'une de ces barres, la zone de contenu affiche la vue de la caméra. L'animation de l'obturateur devrait s'élever, et les barres de navigation supérieure et inférieure resteront toujours sur le dessus.

J'ai réussi à ajouter l'UIImagePickerController à la vue de la fenêtre, ainsi qu'à la présenter de façon modale, mais je n'ai pas eu de chance en l'ajoutant comme sous-vue.

ex:

[window addSubview:camera.view]; 
[self presentModalViewController:camera animated:YES]; 
+0

De l'Doco: « Important: La classe UIImagePickerController prend en charge le mode portrait uniquement Cette classe est destinée à être utilisée en l'état et ne fonctionne pas. La hiérarchie des vues pour cette classe est privée et ne doit pas être modifiée "C'est aussi simple que ça. – Fattie

+0

C'est simplement ** presentViewController **, n'utilisez pas modal. Donc, [self presentViewController: ipc animé: YES achèvement: NULL]; – Fattie

Répondre

0

Je ne pense pas que l'API offre un accès direct à la vue réelle de la UIImagePickerController. La classe est en fait une sous-classe de UINavigationController donc je ne pense pas qu'elle ait une vue réelle mais gère plutôt l'appel de ses sous-contrôleurs et leurs vues. Lorsque vous appelez le modulaire UIImagePickerController, il n'ajoute pas les vues qu'il contrôle comme sous-vues à la fenêtre (ou à toute autre vue). C'est ce que signifie une vue modale. Il présente la vue sur le "côté" de la hiérarchie de vue.

Même si vous pouviez pirater cela ensemble, je pense qu'Apple le rejetterait comme ne faisant pas partie de l'API et pour avoir violé le HIG.

+1

UIImagePickerController est une sous-classe de UIViewController qui possède une propriété view. Il est donc préférable d'utiliser cette propriété view comme sous-vue d'un autre UIView. – jjxtra

2

Appelez viewWillAppear: YES sur le contrôleur du sélecteur d'image après avoir ajouté sa vue à votre vue. Passer la gestion des contrôleurs de vue modale.

+0

Juste essayé ceci et l'affichage de caméra, mais l'objectif ne s'ouvre pas. Il reste juste coincé sur ce graphique avec l'objectif fermé. Je ne sais pas si c'est toujours un problème connexe ou non. Voici ce que j'ai fait: [self.view addSubview: camera.view]; [camera viewWillAppear: YES]; – u2elan

+0

appel viewDidAppear ainsi – Tony

6

Tout ce que vous avez à faire est d'appeler viewWillAppear et viewDidAppear.

Voici un exemple où _pickerController est une instance de UIImagePickerController:

[self.view addSubview:_pickerController.view]; 
[_pickerController viewWillAppear:YES]; 
[_pickerController viewDidAppear:YES]; 
+0

Cela me permet de montrer l'appareil photo comme une sous-vue de n'importe quelle vue (l'objectif s'ouvre et tout va bien). Cependant, la barre en haut avec l'horloge, l'indicateur de batterie, etc. disparaît et se transforme en une barre blanche. Je suppose que UIImagePickerController n'est pas destiné à être utilisé lors de l'affichage de la barre du haut. – Jano

+0

NOt sûr. Je supprime toujours la barre d'état. – jj0b

+0

Merci. Je viens d'ajouter [self.pickerForProfilePicture.view removeFromSuperview]; – YaBoiSandeep

Questions connexes