2011-10-11 5 views
1

J'ai une application iPad qui affiche un UIImagePicker à travers un UIPopoverController. Je voudrais faire le popovercontroller en plein écran (ou au moins aussi grand que possible).Plein écran iPad UIPopoverController

J'utilise la méthode presentPopoverFromRect avec un nouveau CGRect que j'ai défini à diverses largeurs et hauteurs sans résultat. La source de l'imagepicker est UIImagePickerControllerSourceTypePhotoLibrary.

UIPopoverController* popoverController = [[UIPopoverController alloc] initWithContentViewController:photoPicker]; 
popoverController.delegate = self; 
popoverController presentPopoverFromRect:CGRectMake(0, 0, 2500, 2500) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

Puis-je même faire ce plein écran? Qu'en est-il du type de source UIImagePickerControllerSourceTypeCamera?

Répondre

1

Pour définir la taille de popover, vous pouvez remplacer -contentSizeForViewInPopover dans viewcontroller qui est placé dans le popovercontroller.

presentPopoverFromRect est utilisé pour définir la trame à partir de laquelle Popover sera ouvert, pas pour définir sa taille.

+0

Ensuite, je devrais étendre UIImagePickerController et ajouter la méthode -contentSizeForViewInPopover là? Est-ce la seule façon de définir sa taille? – Jovan

+0

'UIImagePickerController' hérite de' UIViewController' donc il a déjà implémenté '-contentSizeForViewInPopover'. Il suffit d'utiliser 'popoverController.contentSizeForViewInPopover = CGSizeMake (w, h);' avant de charger dans le contrôleur popover – Bartek

0

Vous pourriez également vouloir un ModalViewController à la place? Celui-ci dispose de 4 différents presentationstyles (l'un d'eux) fullscreen

Un bon exemple est le prototype écrit dans cette question: presentModalViewController fullscreenmode issue (il est dans le // --- EDIT --- //)

Vérifiez si c'est quelque chose pour vous.

+0

Cela ne fonctionne pas. C'est comme ça que je l'ai essayé au début jusqu'à ce que j'ai une exception en disant: 'Sur iPad, UIImagePickerController doit être présenté via UIPopoverController' – Jovan

1

Je viens de vérifier que ce code fonctionne sur un iPad 1 et iPad 4 (ce qui signifie qu'il est pris en charge dans iOS 5.1.1 - 6.1.2)

popover = [[UIPopoverController alloc] initWithContentViewController:yourVC]; 
    [popover setPopoverContentSize:CGSizeMake(1024, 1024)]; 

    [popover presentPopoverFromRect:CGRectZero 
             inView:appDelegate.splitViewController.view 
        permittedArrowDirections:UIPopoverArrowDirectionAny 
            animated:YES]; 

Vous devez noter qu'il est difficile de rejeter la popover puisqu'il va "remplir l'écran" en portrait ou en paysage. J'ai ces méthodes dans mon appDelegate.splitViewController:

- (BOOL)shouldAutomaticallyForwardRotationMethods { 

    NSLog(@"MG - shouldAutomaticallyForwardRotationMethods"); 
    return YES; 
} 

- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers { 

    NSLog(@"MG - automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers"); 
    return YES; 
} 

Juste unhide/cacher un bouton dans un coin de yourVC de rejeter avec ceci:

[popover dismissPopoverAnimated:YES]; 

Il convient également de noter que « popover » est une propriété forte, ou vous obtiendrez un message désalloué quand il essaie de présenter.