2

我认为这里的问题是我正在尝试调用 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;
}
4

2 回答 2

3

这段代码过于复杂。首先,您以模态方式呈现媒体选择器,然后将其呈现为弹出框;为什么?在弹出窗口中,在呈现之前将其填充到导航控制器中;为什么?在 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];

这适用于任何方向,甚至可以在弹出窗口显示时旋转。

于 2011-01-26T13:43:06.443 回答
0

所有预定义的模态控制器都支持所有方向,但它们必须从根视图控制器呈现,以便它们在方向和旋转中正确运行。我的猜测是代码中的“自我”不是根视图控制器。如果可能的话,您可能需要重新设计代码以实现这一点。

我还见过其他一些技巧,可以在不从根视图控制器呈现的情况下使其工作,但它们似乎都在自找麻烦,例如使用类别扩展 UIViewController 以覆盖 interfaceOrientation。

如果您可以从根视图控制器呈现它,那将是最简单和最干净的,但我意识到这并不总是可能的(例如,它位于您提供给第三方应用程序以嵌入的库中)。

于 2010-07-22T03:29:19.637 回答