UIPopoverController заставляет iPad в книжной ориентации - PullRequest
2 голосов
/ 15 июля 2010

Я думаю, что проблема в том, что я пытаюсь вызвать mediaPicker, и он не поддерживает другие ориентации ...

У кого-нибудь есть решение для этого?

Здесьмой текущий код:

- (IBAction)openMediaPicker:(id)sender {
    MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio];
mediaPicker.delegate = self;
mediaPicker.allowsPickingMultipleItems = YES; // this is the default
    mediaPicker.modalPresentationStyle = UIModalPresentationPageSheet;
    //mediaPicker.prompt = @"Select items to play";
[self presentModalViewController:mediaPicker animated:YES];
[mediaPicker release];

    // Init a Navigation Controller, using the MediaPicker as its root view controller
    UINavigationController *theNavController = [[UINavigationController alloc] initWithRootViewController:mediaPicker];
    [theNavController setNavigationBarHidden:YES];

    // Init the Popover Controller, using the navigation controller as its root view controller
    popoverController = [[UIPopoverController alloc] initWithContentViewController:theNavController];

    // Make a rect at the size and location of the button I use to invoke the popover
   CGRect popOverRect = chooseMusicButton.frame;

    // Specify the size of the popover
    CGSize MySize = CGSizeMake(520.0, 720.0);

    [popoverController setPopoverContentSize:MySize animated:YES];

    // Display the popover
    [popoverController presentPopoverFromRect:popOverRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    popoverController.delegate = self;
}

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Этот код слишком сложен. Сначала вы представляете медиа-сборщик модально, затем вы представляете его как поповер; Зачем? Во всплывающем окне вы помещаете его в контроллер навигации перед его представлением; Зачем? Представить медиапикер на iPad гораздо проще:

MPMediaPickerController* picker = 
    [[[MPMediaPickerController alloc] init] autorelease];
picker.delegate = self;
UIPopoverController* pop = 
        [[UIPopoverController alloc] initWithContentViewController:picker];
self.currentPop = pop;
[pop presentPopoverFromRect:[sender bounds] inView:sender
        permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[pop release];

Это работает в любой ориентации и даже выдерживает вращение, пока отображается поповер.

0 голосов
/ 22 июля 2010

Все предопределенные модальные контроллеры поддерживают все ориентации, но они должны быть представлены из корневого контроллера вида, чтобы они правильно вели себя в ориентации и вращении.Я предполагаю, что «я» в вашем коде не является корневым контроллером представления.Возможно, вам придется немного перестроить код, чтобы это произошло, если это возможно.

Есть и другие хаки, которые я видел, чтобы заставить его работать без представления от контроллера корневого представления, но все они, похоже, спрашиваютза такие проблемы, как расширение UIViewController с категорией, чтобы переопределить интерфейсOrientation.

Если вы можете представить его из контроллера корневого представления, это будет самый простой и чистый, но я понимаю, что это не всегда возможно (например,он находится внутри библиотеки, которую вы предоставляете сторонним приложениям для встраивания).

...