gpt4 book ai didi

iphone - PresentModalViewController 不工作

转载 作者:行者123 更新时间:2023-12-03 19:47:45 27 4
gpt4 key购买 nike

我在尝试使用presentModalViewController 呈现MPMediaPickerController 时遇到了一个奇怪的问题。我让它工作得很好,但最近(也许从 3.1 开始,我不记得它上次工作是什么时候了)MPMediaPickerController 只是拒绝显示自己。屏幕仍然是黑色的,除了顶部的状态栏之外什么都没有,我被迫退出应用程序。

这是我的代码:

// Show the music picker, allowing the user to create a playlist
- (void) showMusicPicker;
{
[[Director sharedDirector] pause];
[[Director sharedDirector] detach];

musicView = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
[window addSubview:musicView];

musicController = [[UIViewController alloc] init];
[musicController setView:musicView];
[musicController setModalTransitionStyle: UIModalTransitionStyleCoverVertical];

MPMediaPickerController *picker =
[[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];

picker.delegate = self;
picker.allowsPickingMultipleItems = YES;
picker.prompt = @"Select songs to play";

// The media item picker uses the default UI style, so it needs a default-style
// status bar to match it visually
[[UIApplication sharedApplication] setStatusBarHidden:NO animated: YES];

[musicController presentModalViewController: picker animated: YES];
[picker release];

}

正如您所看到的,它主要是从 Apple 的示例中逐字复制的,并进行了一些修改以使其能够与 Cocos2D 一起使用。代码中的window变量是应用程序窗口,在init方法中保留:

// Remember the window that the director is attached in
window = [[[[Director sharedDirector] openGLView] window] retain];

该方法的其余部分似乎工作正常... Controller 从窗口分离并出现状态栏。但是 MPMediaPickerController 应该出现在屏幕上,但它没有出现。正如我提到的,不久前它运行良好,所以我对这里发生的事情感到困惑。

感谢您提供的任何帮助。

编辑:我注意到,如果我注释掉这些行:

[[Director sharedDirector] pause];
[[Director sharedDirector] detach];

[window addSubview:musicView];

并将它们替换为:

[[[Director sharedDirector] openGLView] addSubview: musicView]

...然后选择器 Controller 将按其应有的方式显示。这是我在 3.0 发布后第一次实现 iPod 库访问时添加 View 的方式,因为它比当前的方式稍微简单一些。然而,这种方法的问题是,一旦选择器 Controller 被关闭,在触摸事件上向我报告的所有触摸坐标都会变得不准确 - 它们比应有的高度(纵向方向)高出大约 20 像素。不确定这是否是 Cocos2D 的错误或什么,但它几乎排除了直接在 Director 的 openGLView 上呈现 Controller 的可能性。

最佳答案

好吧,我想我已经弄清楚了。对于其他可能发现自己处于这种情况的人来说,这是一种工作方法(我犹豫是否要说“正确的方法”):

- (void) showMusicPicker;
{
[[Director sharedDirector] pause];

musicController = [[UIViewController alloc] init];
[musicController setView:[[Director sharedDirector] openGLView]];
[musicController setModalTransitionStyle: UIModalTransitionStyleCoverVertical];

MPMediaPickerController *picker =
[[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];

picker.delegate = self;
picker.allowsPickingMultipleItems = YES;
picker.prompt = @"Select songs to play";

// The media item picker uses the default UI style, so it needs a default-style
// status bar to match it visually
[[UIApplication sharedApplication] setStatusBarHidden:NO animated: YES];

[musicController presentModalViewController: picker animated: YES];
[picker release];

}

这会显示选取器,并且在选取器关闭后不会导致 Director 报告不正确的坐标。

关于iphone - PresentModalViewController 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1450375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com